以下のコードは、作成者の意図する結果を招いていません (無限ループに陥ってしまう。以下のコードは、タイムアウトとして、無限ループを 防いでいる)。その原因を追求し、コードを修正しなさい。
作成者は「人間が机を指定した位置まで移動させ、移動するに要した時間を 計ろう」としています。
class CDesk { public: CDesk() { m_iCrntPos = 0; } // 位置を移動させる。 void IncrementPos(int iIncrement) { m_iCrntPos += iIncrement; } // 現在の位置を取得する。 int GetCrntPos() const { return m_iCrntPos; } private: // 現在にいる位置 int m_iCrntPos; }; class CHuman { public: CHuman(int iWorkQuant) { m_iWorkQuant = iWorkQuant; } // 机を単位時間に移動させる。 void MoveDesk(CDesk desk) { desk.IncrementPos(m_iWorkQuant); } private: // 机を単位時間に移動させることのできる距離 int m_iWorkQuant; } int main() { CHuman worker(10); CDesk desk; int iTime = 0; while(1) { // 机を動かす。 worker.MoveDesk(desk); // 現在の位置を確認する。 if(desk.GetCrntPos() >= 100) { break; } // タイムアウト if(iTime > 1000) break; // 時間をカウントする。 iTime++; } if(iTime < 1000) cout << "Time: " << iTime << endl; else cout << "Time out" << endl; return 0; }