2013-02-19 96 views
0

所以我正在研究基本的類構造函數。問題是,當我使用點運算符來查找我的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這顯然是錯誤的。爲什麼我會得到這個答案?

回答

4

由於dTime從未初始化,因此您在dSecs = dTime;上遇到未定義的行爲。之後,所有投注都關閉。

您可能需要dTime = dSecs

+0

謝謝,完全忽略它應該是dTime = dSecs – Josh 2013-02-19 23:47:47

0

你分配到dTimedSecs它需要是周圍的其他方式,以及你的構造需要你dDistancedSecs參數以不同的順序比你傳遞給它(假設什麼馬走遍122米在11.40秒,而不是122秒內11.40米)。

0

在你的構造,反轉以下行:

dSecs = dTime; 
1

正如其他人所說,你有你的構造函數中的錯誤。如果你已經使用構造函數初始化列表(這是推薦的方法)實現它,那麼你會產生一個編譯器錯誤。

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