显示垃圾值

时间:2014-09-12 12:44:03

标签: c++ class oop object

我正在学习课程,我在练习时偶然发现了这一点。我很困惑为什么我得到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();
}

enter image description here

3 个答案:

答案 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中的省略返回值。