Постоянно выдает 0 в возвращаемом значении, хотя не должен

пишу примитивный калькулятор с использованием ООП в С++. Но, что бы не написать, он всегда выдает 0, хотя не должен, никак понять не могу, почему.

Так, к примеру, на простую операцию 5+1 должен выводить 6, но получается 0:

main.cpp

#include "Header.h"
using namespace std;

int main() {
    int temp, temp2;
    char sign;
    cin >> temp >> sign >> temp2;
    Class1 obj(temp, sign, temp2);
    cout << obj.Operation();
}

Header.h

#ifndef Class1_H
#define Class1_H
class Class1 {
    private:
        int temp, temp2, sign;
    public: 
        int Operation();
        Class1(int num1, int Sign, int num2);
};
#endif

Source.cpp

#include <iostream>
#include "Header.h"
using namespace std;
Class1::Class1(int num1, int Sign, int num2) {
    temp = num1;
    sign = Sign;
    temp2 = num2;
}
int Class1::Operation() {
    int ascii = sign;
    int res;
    switch (ascii) {
        case 43:
            res = temp + temp2;
        case 45:
            res = temp - temp2;
        case 42:
            res = temp * temp2;
        case 37:
            res = temp % temp2;
    }

    return res;
}

Ответы (1 шт):

Автор решения: Harry

Для начала перепишем ваш код с использованием литералов символов, а не жутких кодов - так понятнее:

switch (ascii) {
    case '+':
        res = temp + temp2;
    case '-':
        res = temp - temp2;
    case '*':
        res = temp * temp2;
    case '%':
        res = temp % temp2;
}

Итак, 5 + 1. Управление передается ветви case '+'. Выполняется суммирование. Дальше, раз нет break, управление передается ветви case '-', за ней... - словом, до последней строки, которая и вычисляет остаток от деления 5 на 1...

Вот так

switch (ascii) {
    case '+':
        res = temp + temp2;
        break;
    case '-':
        res = temp - temp2;
        break;
    case '*':
        res = temp * temp2;
        break;
    case '%':
        res = temp % temp2;
        break;
}

будет правильнее. Но что вы будете делать, если пользователь введет какой-то иной знак? Ведь ветви default у вас нет...

→ Ссылка