2
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->action()' はオーバーライドされた子関数を実行する必要があります。教えてください、目標を達成するためにコードを修正するにはどうすればよいですか...ありがとう!

4

3 に答える 3

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;
 }
于 2012-08-06T10:08:13.143 に答える
2

メンバー関数を宣言する必要がありますvirtual(たとえば、すべてのメソッドが暗黙的である Java とは異なりますvirtual)。

class Foo
{
public:
    virtual void action(); 
};
于 2012-08-06T10:08:57.630 に答える
2

Java などの他の言語とは異なり、C++ の基本クラスでは、キーワードを使用してオーバーライドできるメソッドを明確にマークする必要があります。virtual

于 2012-08-06T10:09:35.080 に答える