c中的虚拟继承是什么?
发布时间:2020-12-16 06:44:07 所属栏目:百科 来源:网络整理
导读:我有一个关于c中虚拟继承的问题: class A {};class B: virtual public A {};class C: virtual public A {};class D: public B,public C,virtual public A {}; 如果D继承B和C的虚拟继承可以确保在D中只有一个副本A,但D如何继承A使用虚拟public A就像上面的代
我有一个关于c中虚拟继承的问题:
class A { }; class B: virtual public A { }; class C: virtual public A { }; class D: public B,public C,virtual public A { }; 如果D继承B和C的虚拟继承可以确保在D中只有一个副本A,但D如何继承A使用虚拟public A就像上面的代码? 所以类型A的子对象的数量是1或2? 好的,谢谢你的答案,我明白了.但是我仍然把一些表达与虚拟的继承混为一谈. #include <iostream> using namespace std; class A { public: A() {std::cout<<"A ";} }; class B: A { public: B() {std::cout<<"B ";} }; class AToo: virtual A { public: AToo() { std::cout<<"AToo "; } }; class ATooB: virtual AToo,virtual B { public: ATooB() { std::cout<<"ATooB "; } }; 虚拟机可以确保ATooB中只有一个副本吗?如果AToo虚拟继承A,但B不会,会发生什么?两个副本在ATooB?所以这意味着B和AToo应该虚拟继承A,以便在ATooB内只保留一个副本? 解决方法
一个 – 这是虚拟继承的预期用途.只有一个副本A.
你实际上可以很容易地验证.给一个成员并使用D实例进行修改.如果有多个A的副本,编译器会说访问是不明确的. 在编辑的问题中编辑,将有两个副本A.每次A定期继承(无虚拟)时,将创建一个新的A副本.如果你想要一个副本,每次都声明它是虚拟的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |