从基类执行重写方法

Fai*_*ler -2 c++ virtual inheritance

我有两个类,如下所示(我试图尽可能抽象示例):

#include <iostream>
using namespace std;

class foo1
{
public:
    foo1() {};
    virtual ~foo1() {};
    void Method1()           { Method2(); }
    virtual void Method2()   { cout<<"parent";}
};

class foo2 : public foo1
{
public:
    virtual void Method2()  { cout<<"child";}
};

int main()
{
    foo2 a = foo2();
    a.Method1();
}
Run Code Online (Sandbox Code Playgroud)

我收到了"父母"的消息.所以Method1()foo2执行foo1::Method2().

我需要使用什么来foo2::Method1调用它们foo2::Method2

Luc*_*ore 9

不,你不,你得到"child".如果你这样做,你会得到父母

foo1 a = foo2();   // My crystal ball tells me this is what you really have
Run Code Online (Sandbox Code Playgroud)

这将是由于对象切片.要使它工作,你需要指针或引用:

foo2 f;
foo1& rf = f;
rf.Method1();   //child
Run Code Online (Sandbox Code Playgroud)

要么

foo1* a = new foo2();
a->Method1();   //child
Run Code Online (Sandbox Code Playgroud)

  • @UmNyobe你得到一个你的每10k:P (3认同)