我正在学习课程,我在练习时偶然发现了这一点。我很困惑为什么我得到amount
的垃圾输出,为什么预先显示amount
的正确值也是如此。
我哪里错了?
我已粘贴输出。
#include<iostream>
using namespace std;
class Resort{
float charges ;
int days ;
float amount ;
float compute() ;
public:
void getdata();
void disp();
};
void Resort::getdata(){
cout<<"\nCharges : ";
cin>>charges ;
cout<<"\nNo of days : ";
cin>>days ;
}
void Resort::disp(){
cout<<"\nCharges : "<<charges
<<"\nDays : "<<days
<<"\nAmount : "<<compute()<<endl ;
}
float Resort::compute(){
amount = (days*charges) ;
cout<<amount;
}
int main(){
Resort obj ;
obj.getdata();
cout<<"\n\n";
obj.disp();
}
答案 0 :(得分:0)
您没有从compute
函数返回任何内容,但是您正在disp
输出其返回值
您可能需要以下内容:
float Resort::compute(){
amount = (days*charges) ;
cout<<amount;
return amount;
}
答案 1 :(得分:0)
要防止变量中的垃圾值,您可以为Resort类定义构造函数,并为变量提供默认值,这样即使您忘记处理变量的值也是你初始化的值,你将显示而不是垃圾值。 例如 你可以在类定义中包含这样的构造函数。
public:
Resort()
{
charges = (float)0.0 ;
days = 0;
amount = (float)0.0;
}
特别是对于上面的代码,您需要在调用函数之前调用compute函数来打印值。
答案 2 :(得分:0)
在disp
中,您尝试打印compute
的返回值,但您忘记在那里添加返回值。您还可以获得双重打印输出,因为compute
也会打印到cout
。
未来的提示是始终尽可能多地打开编译器警告标志(g++
这是-Wall
)。执行此操作可能会让编译器警告您compute
中的省略返回值。