子类中的C ++重写函数成员

时间:2012-08-06 10:06:14

标签: c++ g++ override

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-&gt; action()'应该运行子项的重写函数。 请告诉我,如何更正代码以达到我的目标... 谢谢!

3 个答案:

答案 0 :(得分: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;
 }

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

与其他语言(如Java)不同,在C ++基类中必须使用关键字virtual

专门标记它允许覆盖的方法