-3

以下のような2つのクラスがあります(できる限り例を抽象化しようとしました):

#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()の をfoo2実行しfoo1::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 に答える