为什么我会得到一个奇怪的答案?

问题描述:

所以我正在研究基本的类构造函数。问题是,当我使用点运算符来查找我的Horse对象的速度时,我得到的答案毫无意义,我想知道什么是错误的以及如何纠正它?为什么我会得到一个奇怪的答案?

class Horse{ 
     public: 
     string sName; 
     double dDist; 
     double dTime; 

     //constructor 
     Horse(string sHorseName, double dDistance, double dSecs){ 
     sName = sHorseName; 
     dDist = dDistance; 
     dSecs = dTime; 
     } 

     double dSpeed(){ 
      return (dDist/dTime); 
     } 


     }; 



    int main(){ 
     Horse Horse1("frankel", 11.40, 122); 
     cout << Horse1.dSpeed() << " m/s. " << endl; 
     cout << Horse1.sName << endl; 
     return 0; 
     } 

程序给出的答案是5.95461e + 306这显然是错误的。为什么我会得到这个答案?

由于dTime从未初始化,因此您在dSecs = dTime;上遇到未定义的行为。之后,所有投注都关闭。

您可能需要dTime = dSecs

+0

谢谢,完全忽略它应该是dTime = dSecs – Josh 2013-02-19 23:47:47

你分配到dTimedSecs它需要是周围的其他方式,以及你的构造需要你dDistancedSecs参数以不同的顺序比你传递给它(假设什么马走遍122米在11.40秒,而不是122秒内11.40米)。

在你的构造,反转以下行:

dSecs = dTime; 

正如其他人所说,你有你的构造函数中的错误。如果你已经使用构造函数初始化列表(这是推荐的方法)实现它,那么你会产生一个编译器错误。

Horse(string sHorseName, double dDistance, double dSecs) : sName(sHorseName), sDist(sDistance), dTime(dSecs) {}