2
class Foo
{
    public:
        void    action();
};

class Bar : public Foo
{
    public:
        void    action();
};

void Foo::action ()
{
    cout << "parent\n";
};

void Bar::action ()
{
    cout << "child\n";
};



int main()
{
    Foo* foo = new Bar ();
    foo->action();          // returns "parent" - "child" expected

    return 1;
 }

对于一个可能微不足道的问题,我很抱歉,但我是 C++ 新手...'foo' 指针必须指向 Foo 类的一个实例,因为它可以是 Foo 的任何子类,例如 Bar、Bar1、Bar2、Bar3等等

同时 'foo->action()' 应该运行一个被覆盖的子函数。请告诉我,我如何更正代码以达到我的目标......谢谢!

4

3 回答 3

2

virtual对父类函数使用关键字。而且,你的父类应该有virtual destructor.

class Foo
{
    public:
        virtual void    action();
};

class Bar : public Foo
{
    public:
        void    action();
};

void Foo::action ()
{
    cout << "parent\n";
};

void Bar::action ()
{
    cout << "child\n";
};



int main()
{
    Foo* foo = new Bar ();
    foo->action();          // returns "parent" - "child" expected

    return 1;
 }
于 2012-08-06T10:08:13.143 回答
2

需要声明成员函数virtual(例如,与 Java 不同,其中所有方法都是隐式的virtual):

class Foo
{
public:
    virtual void action(); 
};
于 2012-08-06T10:08:57.630 回答
2

与其他语言(如 Java)不同,在 C++ 基类中必须专门标记它允许通过使用关键字覆盖的方法virtual

于 2012-08-06T10:09:35.080 回答