0
仮想基本クラスを使用すると、多重継承はどのように機能しますか? バーチャルベースクラスをいつ、どこで使うべきかを私たちはどのように知っていますか?仮想基本クラスを使用すると、多重継承はどのように機能しますか?
次のコードでは、どのように出力を取得しますか?
class A {
public:
A() {
cout<<"\t A";
}
};
class B: public A {
public:
B() {
cout<<"\t B";
}
};
class C: public B {
public:
C() {
cout<<"\t C";
}
};
class D: virtual C {
public:
D() {
cout<<"\t D";
}
};
class E: virtual C, virtual D {
public:
E() {
cout<<"\t E";
}
};
class F: public B, virtual E {
public:
F() {
cout<<"\t F";
}
};
int main() {
F obj;
}
出力は次のようになります。
A B C D E A B F
私はどのように警告 による曖昧に[警告]ダイレクトベース 'B' にアクセスできなく 'F' で[デフォルトで有効になって]
を取得します私はそれを修正する??
私が最初にあなたがしたいです何を出力再設計 –
を検討します取得する?どのように "修正する"かは、あなたが達成しようとしているものによって決まります。 – interjay
仮想継承は、最初に導入されたレベルからのみ適用されます。 「C」と「D」のどちらも実質的に継承していないので、両方から継承すると(基本的に)重複した基底とあいまいさが残っています。 – StoryTeller