2014-10-05 63 views
0

編輯!繼承時預期的結果不起作用?

愚蠢的錯字,而我沒有看到導致此問題。現在解決。謝謝大家!

爲什麼不會我的代碼輸出COUT的每個單獨的類?

預期的結果應該是從1消息與消息從2?

class CTest 
{ 
public: 
    virtual void WriteMessage(); 
}; 
void CTest::WriteMessage() 
{ 
} 

class CMessage1 : public CTest 
{ 
    virtual void WriteMesssage() 
    { 
     cout << "Message from 1" << endl; 
    } 
}; 


class CMessage2 : public CTest 
{ 
    virtual void WriteMesssage() 
    { 
     cout << "Message from 2" << endl; 
    } 
}; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 

    CTest* pMessages[4]; 
    pMessages[0] = new CMessage1; 
    pMessages[1] = new CMessage2; 
    pMessages[2] = new CMessage1; 
    pMessages[3] = new CMessage2; 
    for (int i = 0; i < 4; i++) 
    { 
     pMessages[i]->WriteMessage(); 
    } 
    return 0; 
} 

我是否需要爲CMessage的每個實例創建WriteMessage虛擬void? 像這樣:

void CMessage2::WriteMesssage() 
{ 
cout << "Message from 2" << endl; 
} 
+0

你觀察到什麼行爲? – 2014-10-05 17:41:42

+0

究竟是什麼問題? – Galik 2014-10-05 17:41:59

+0

它不會在每個類的cout中打印出任何內容。當它通過主數組時,它應該輸出來自每個不同類的cout。 代碼運行並編譯,但根本沒有輸出。 – Keir 2014-10-05 17:45:08

回答

2

你拼錯WriteMessageWriteMesssage(注意3 'S'),因此不會覆蓋基礎版本。

注意使用override關鍵字(從C++ 11)可以幫助告訴你,當你不重寫你打算什麼。

+1

當然,不過這確實應該僅僅是一票到接近「簡單的拼寫錯誤」。 – 2014-10-05 18:44:20