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

时间:2013-02-19 23:40:08

标签: c++ class object constructor floating-point

所以我正在研究基本的类构造函数。问题是,当我使用点运算符找到我的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 个答案:

答案 0 :(得分:4)

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

你可能会dTime = dSecs

答案 1 :(得分:1)

正如其他人所提到的,构造函数中存在错误。如果您使用构造函数初始化列表(这是推荐的方法)实现它,那么您将产生编译器错误。

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

答案 2 :(得分:0)

当您需要将dTime分配给dSecs时,您需要将其与dDistancedSecs参数的顺序区别开来。你传递给它的是什么(假设马在11.40秒内行进了122米,在122秒内行走了11.40米)。

答案 3 :(得分:0)

在构造函数中,反转以下行:

dSecs = dTime;