-3

我有两个像下面这样的类(我尽量抽象示例):

#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();
}

我收到了“父母”的消息。所以执行。Method1()_foo2foo1::Method2()

我需要使用什么来foo2::Method1调用他们的foo2::Method2?

4

1 回答 1

9

不,你没有,你得到"child"。如果你这样做了,你会得到父母

foo1 a = foo2();   // My crystal ball tells me this is what you really have

这将是由于对象切片。为了让它工作,你需要指针或引用:

foo2 f;
foo1& rf = f;
rf.Method1();   //child

或者

foo1* a = new foo2();
a->Method1();   //child
于 2012-11-01T14:07:21.313 回答