9

私は持っています:

class A{
    public:
        virtual void foo();
};

class B : public A{
    public:
        void foo();
};

B *ptr = new B();

foo()'ptr'ポインタを使用してAを直接呼び出したい。

やってみると

(A*)ptr->foo();

それはまだBのバージョンのを呼び出しますfoo()。代わりにAのバージョンを呼び出すにはどうすればよいですか?

これは可能ですか?選択肢は何ですか?ありがとうございました。

4

2 に答える 2

19

スコープ解決フォームを使用して関数に名前を付けるときは、::仮想ではないかのように、名前付き関数を呼び出します。

ptr->A::foo();
于 2012-08-29T16:35:52.900 に答える
2

関数を公開する必要があります。これを行うには、次の変更を行うだけです。

class A{
    public:
        virtual void foo();
};

class B : public A{
    public:
        void foo();
};

これを行わないと、機能は自動的にプライベートになり、「外部」からアクセスできなくなります。

于 2012-08-29T16:36:45.587 に答える