继承时预期的结果不起作用?

时间:2014-10-05 17:39:45

标签: c++ class inheritance base

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;
}

1 个答案:

答案 0 :(得分:2)

你拼错了WriteMessage WriteMesssage(注意3''),因此它不会覆盖基本版本。

请注意,使用override关键字(来自C ++ 11)可以帮助告诉您何时没有覆盖您的目标。