2

次のコードはクラス B から関数 F を呼び出しますが、その理由を説明してください。クラス B のメソッドがクラス V のメソッドをオーバーロードする可能性はありますか (B は V から継承されているため)。前もって感謝します。

#include <iostream>
using namespace std;

class V{
public: 
    void f(){ x+=2; cout << "V:"<< x;};
    int x;
};
class B: public virtual V{
public:
    void f(){ x+=3; cout << "B:"<< x;};
    int x;
};
class D: public B, virtual public V{
public:
    void g(){   x++;    f();    }
};
void main(){
    D ins;
    ins.x = 1;
    ins.g();
}
4

2 に答える 2

6

B::f() メソッドを非表示にします。これは、関数V::f()の非表示として知られています。

よく読んでください:
警告: Derived::f(char) hides Base::f(double)? の意味は何ですか?

于 2013-02-11T09:03:48.953 に答える
1

いいえ、オーバーロードは行われません。上で答えたように、B の f() は単に V の f() を隠します。これは、D が B と V の両方から継承され、B が 2 つの中で最も派生しているため、B から f() を取得するためです。 V は既に B から含まれているため、V から D を継承する必要はないという点。

于 2013-02-11T09:45:11.443 に答える