タグ付けされた質問 「virtual-inheritance」


5
仮想継承はどのようにして「ダイヤモンド」(多重継承)のあいまいさを解決しますか?
class A { public: void eat(){ cout<<"A";} }; class B: virtual public A { public: void eat(){ cout<<"B";} }; class C: virtual public A { public: void eat(){ cout<<"C";} }; class D: public B,C { public: void eat(){ cout<<"D";} }; int main(){ A *a = new D(); a->eat(); } ダイヤモンドの問題を理解しています。上記のコードにはその問題はありません。 …

4
サブクラスアドレスは仮想基本クラスアドレスと同じですか?
単純な単一継承を使用する場合、派生クラスのアドレスは基本クラスのアドレスと同じであることは誰もが知っています。多重継承はそれを真実にしません。 仮想継承もそれを正しくありませんか?つまり、次のコードは正しいですか。 struct A {}; struct B : virtual A { int i; }; int main() { A* a = new B; // implicit upcast B* b = reinterpret_cast<B*>(a); // fishy? b->i = 0; return 0; }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.