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

逆にする必要があるときに に割り当てdTimeており、コンストラクターは、渡されたものとは異なる順序でパラメーターとパラメーターを受け取ります (馬が 122 メートルで 11.40 メートルではなく、11.40 秒で 122 メートル移動したと仮定します)秒)。dSecsdDistancedSecs

于 2013-02-19T23:43:38.790 に答える
0

コンストラクターで、次の行を反転します。

dSecs = dTime;
于 2013-02-19T23:44:07.193 に答える