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

4 回答 4

4

您遇到未定义的行为,dSecs = dTime;因为dTime从未初始化。在那之后,所有的赌注都被取消了。

你可能会精神错乱dTime = dSecs

于 2013-02-19T23:41:25.433 回答
1

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

Horse(string sHorseName, double dDistance, double dSecs) : sName(sHorseName), sDist(sDistance), dTime(dSecs) {}
于 2013-02-19T23:50:05.123 回答
0

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

dSecs = dTime;
于 2013-02-19T23:44:07.193 回答
0

您正在分配dTime何时dSecs需要相反,并且您的构造函数以与传递给它的顺序不同的顺序获取dDistance和参数(假设马在 11.40 秒内行驶了 122 米,而不是在 122 秒内行驶了 11.40 米dSecs秒)。

于 2013-02-19T23:43:38.790 回答