我有一个关于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内只保留一个副本?
解决方法
原文地址:https://www.jb51.cc/c/113238.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。