1

using namespace std;

class map
{
    private:
        float result= 0;
    public:
        void func_1();
        void setres(float counter);
        float getres();
};
void map::setres(float counter)
{
    result= counter;
}
float map::getres()
{
    return result;
}
void map::func_1()
{
    float num_0=0, num_1=0, sum=0, i;
    
    map run;
    
    cout << run.getres() << " Result." << endl;
    if(result != 0)
        cout << "We already have a result saved and it's: " << run.getres() << endl;
    else
    {
        cout << "Give me first number: ", cin >> num_0;
        cout << "Give me second number: ", cin >> num_1;
        sum= num_0+num_1;
        cout << "Result is: " << sum << endl;
    }
    cout << "The program will save the result." << endl;
    run.setres(sum);
    cout << "The saved result is: " << run.getres() << "\nPress 1 to repeat the function and check\nif the result is saved." << endl;
    cin >> i;
    if(i==1)
        run.func_1();    
}

int main()
{
    map go;
    go.func_1();
    return 0;
}

我不知道为什么不保存私有变量结果。我怎样才能让它工作。

然后我开始编译它工作正常,私有结果正在改变,但随后我重新打开函数,结果回到 0,我希望它成为最后一个结果。

示例:我输入 4 我输入 7 总和为 11 保存的结果为 11 然后我按 1 开始,结果再次为 0,但我希望它为 11 而不是 0。

4

3 回答 3

1

在函数中,您正在创建类型映射的局部变量

map run;

其数据成员结果发生变化。即该函数不会更改调用该函数的对象的数据成员结果。

此外,例如在这个代码片段中

cout << run.getres() << " Result." << endl;
if(result != 0)

您正在访问两个不同对象的数据成员结果。在第一个声明中

cout << run.getres() << " Result." << endl;

run在下一条语句中,您正在访问本地对象的数据成员

if(result != 0)

go您正在访问为其调用成员函数的对象(在 main 中声明的对象)的数据成员结果。

所以去掉函数中的声明

map run;

而不是像这样的表达式,例如run.getres()使用 justgetres()this->getres().

于 2021-05-07T23:39:22.680 回答
0

问题是您的函数没有使用调用该方法的对象的成员。相反,您在函数内创建一个新实例:

void map::func_1()
{
    float num_0=0, num_1=0, sum=0, i;
    
    map run;  // <---------- here
    //...

这就是为什么每次调用该函数时都会得到一个新的对象。您不需要创建该实例。您已经在main可以访问其成员的成员函数中和内部创建了一个。作为修复,您可以run.从代码中删除所有内容。例如

cout << run.getres() << " Result." << endl;

->

cout << getres() << " Result." << endl;

或者如果你喜欢

cout << this->getres() << " Result." << endl;
于 2021-05-07T23:41:13.867 回答
0

该值被保存到run,并被run.func_1()调用以进行检查,但随后run.getres()在那里被调用。这run是新map对象,与run保存数据的对象不同。

你检查了result != 0,但你曾经run.getres()打印过结果。这里不一致。

代替

    cout << run.getres() << " Result." << endl;
    if(result != 0)
        cout << "We already have a result saved and it's: " << run.getres() << endl;

你应该做

    cout << result << " Result." << endl;
    if(result != 0)
        cout << "We already have a result saved and it's: " << result << endl;

或者

    cout << getres() << " Result." << endl;
    if(getres() != 0)
        cout << "We already have a result saved and it's: " << getres() << endl;
于 2021-05-07T23:45:44.607 回答