【问题标题】:why do I get a strange answer?为什么我会得到一个奇怪的答案?
【发布时间】:2013-02-19 23:40:08
【问题描述】:

所以我正在研究基本的类构造函数。问题是,当我使用点运算符查找我的 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,这显然是错误的。为什么我会得到这个答案?

【问题讨论】:

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


    【解决方案1】:

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

    你可能会提醒dTime = dSecs

    【讨论】:

    • 谢谢,完全忽略了应该是dTime = dSecs
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      当您需要将dTime 分配给dSecs 时,它需要反过来,并且您的构造函数以与您传递给它的顺序不同的顺序获取您的dDistancedSecs 参数(假设马在 11.40 秒内跑了 122 米,而不是在 122 秒内跑了 11.40 米)。

      【讨论】:

        【解决方案4】:

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

        dSecs = dTime;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-28
          • 1970-01-01
          • 1970-01-01
          • 2022-01-07
          • 1970-01-01
          相关资源
          最近更新 更多