2014-10-05 62 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