Class 私有成员的功能不会改变
Class private member wont change in function
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;
}
不知道为什么私有变量result没有保存。我怎样才能让它发挥作用。
然后我开始编译它工作正常,私人结果正在改变,但后来我重新打开函数,结果回到 0,我希望它成为最后的结果。
示例:
我放4
我放7
总和是 11
保存的结果是 11
然后我按 1 开始,结果又是 0,但我希望它是 11 而不是 0。
在函数中,您正在创建 map 类型的局部变量
map run;
数据成员结果发生变化。即该函数不改变调用该函数的对象的数据成员结果。
此外,例如在这段代码中
cout << run.getres() << " Result." << endl;
if(result != 0)
您正在访问两个不同对象的数据成员结果。在第一个语句中
cout << run.getres() << " Result." << endl;
您正在访问本地对象的数据成员run
,而在下一条语句中
if(result != 0)
您正在访问调用成员函数的对象(在 main 中声明的对象 go
)的数据成员结果。
所以去掉函数中的声明
map run;
而不是像 run.getres()
这样的表达式,只使用 getres()
或 this->getres()
.
问题是您的函数没有使用调用该方法的对象的成员。相反,您在函数内创建一个新实例:
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;
值被保存到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;
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;
}
不知道为什么私有变量result没有保存。我怎样才能让它发挥作用。
然后我开始编译它工作正常,私人结果正在改变,但后来我重新打开函数,结果回到 0,我希望它成为最后的结果。
示例: 我放4 我放7 总和是 11 保存的结果是 11 然后我按 1 开始,结果又是 0,但我希望它是 11 而不是 0。
在函数中,您正在创建 map 类型的局部变量
map run;
数据成员结果发生变化。即该函数不改变调用该函数的对象的数据成员结果。
此外,例如在这段代码中
cout << run.getres() << " Result." << endl;
if(result != 0)
您正在访问两个不同对象的数据成员结果。在第一个语句中
cout << run.getres() << " Result." << endl;
您正在访问本地对象的数据成员run
,而在下一条语句中
if(result != 0)
您正在访问调用成员函数的对象(在 main 中声明的对象 go
)的数据成员结果。
所以去掉函数中的声明
map run;
而不是像 run.getres()
这样的表达式,只使用 getres()
或 this->getres()
.
问题是您的函数没有使用调用该方法的对象的成员。相反,您在函数内创建一个新实例:
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;
值被保存到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;