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

C++ overriding function member in child class

本文关键字:函数 成员 重写 子类 C++      更新时间:2023-10-16
class Foo
{
    public:
        void    action();
};
class Bar : public Foo
{
    public:
        void    action();
};
void Foo::action ()
{
    cout << "parentn";
};
void Bar::action ()
{
    cout << "childn";
};

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

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

同时,"foo->action()"应该运行子项的重写函数。请告诉我,我如何更正代码以实现我的目标......谢谢!

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

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

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

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

class Foo
{
    public:
        virtual void    action();
};
class Bar : public Foo
{
    public:
        void    action();
};
void Foo::action ()
{
    cout << "parentn";
};
void Bar::action ()
{
    cout << "childn";
};

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