在 类 和构造函数 [OOP] 中从用户获取整数输入时无法正确使用运算符

Can't use operators properly when taking integer inputs from user in classes and constructors [OOP]

我正在尝试对相同的 2 个整数变量进行多次计算并分别显示它们的结果。 如果我已经为变量设置了值,它就可以正常工作。 但是,如果我尝试从用户那里获取输入,那么它会在输出中给我随机数。 这是我的代码,我在其中尝试从用户那里获取 input/values。

#include<iostream>
using namespace std;
class calculation
{
    public:
        calculation()
        {
            int num1 = 0;
            int num2 = 0;
            cout << "Write your numbers" << endl;
            cin >> num1>>num2;
        }
        int sum()
        {
            return num1+num2;
        }
        int sub()
        {
            return num1-num2;
        }
        int mul()
        {
            return num1*num2;
        }
        int div()
        {
            return num1/num2;
        }
        int mod()
        {
            return num1%num2;
        }

        void displayMessage()
        {
            cout<<sum()<<endl<<sub()<<endl<<mul()<<endl<<div()<<endl<<mod();
        }
    private:
        int num1,num2;
};
int main()
{
    calculation obj;
    obj.displayMessage();
    system("Pause");
    return 0;
}

输出不正确,它只是给我随机数。

但是,如果我使用以下代码使用预设值进行操作:

#include<iostream>
using namespace std;
class calculation
{
    public:
        calculation()
        {
            num1=10;
            num2=5;
        }
        int sum()
        {
            return num1+num2;
        }
        int sub()
        {
            return num1-num2;
        }
        int mul()
        {
            return num1*num2;
        }
        int div()
        {
            return num1/num2;
        }
        int mod()
        {
            return num1%num2;
        }
        
        void displayMessage()
        {
            cout<<sum()<<endl<<sub()<<endl<<mul()<<endl<<div()<<endl<<mod();
        }
    private: 
        int num1,num2;
};
int main()
{
    calculation obj;
    obj.displayMessage();
    return 0;
}

然后它给出正确的输出。

#include<iostream>
using namespace std;
class calculation
{
    public:
        calculation()
        {
            num1 = 0;
            num2 = 0;
            cout << "Write your numbers" << endl;
            cin >> num1>>num2;
        }
        int sum()
        {
            return num1+num2;
        }
        int sub()
        {
            return num1-num2;
        }
        int mul()
        {
            return num1*num2;
        }
        int div()
        {
            return num1/num2;
        }
        int mod()
        {
            return num1%num2;
        }

        void displayMessage()
        {
            cout<<sum()<<endl<<sub()<<endl<<mul()<<endl<<div()<<endl<<mod();
        }
    private:
        int num1,num2;
};
int main()
{
    calculation obj;
    obj.displayMessage();
    system("Pause");
    return 0;
}

您正在构造函数中重新声明局部作用域。删除 int num1 和 int num2 到 num1 = 0; num2 = 0;

还可以考虑将构造函数之外的用户输入移动到主构造函数,并有一个接受 2 个整数的构造函数。

calculation(int num1, int num2)
{
  this->num1 = num1;
  this->num2 = num2;
}

在你的构造函数中:

    calculation()
    {
        int num1 = 0;
        int num2 = 0;
        cout << "Write your numbers" << endl;
        cin >> num1>>num2;
    }

您已经创建了两个 局部变量 名称 num1num2。它们与你的成员变量同名,但又不相同。它们是新变量。

您将值读入这些变量,然后在构造函数退出时立即销毁它们。

此更改将使用成员变量,而不是创建新变量。

    calculation()
    {
        num1 = 0;
        num2 = 0;
        cout << "Write your numbers" << endl;
        cin >> num1 >> num2;
    }

您也可以选择使用 this-> 来明确表示您打算更改 成员变量.

    calculation()
    {
        this->num1 = 0;
        this->num2 = 0;
        cout << "Write your numbers" << endl;
        cin >> this->num1 >> this->num2;
    }