EDIT!
我没有看到的愚蠢错字导致了这个问题。现在解决了。谢谢大家!
为什么我的代码不会从每个班级输出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 :(得分:2)
你拼错了WriteMessage
WriteMesssage
(注意3''),因此它不会覆盖基本版本。
请注意,使用override
关键字(来自C ++ 11)可以帮助告诉您何时没有覆盖您的目标。