请教一下,我关于虚继承的一些理解是否正确。

PDD123 2014-12-11 03:24:05
1.若某个继承脉络上,使用了虚继承,那么其后的所有继承都是虚继承?
比如
class A {};
class B : public A {};
class C : virtual public B {};
class D : public C {};//写法1
class D : virtual public C {};//写法2

因为C使用了虚继承,那么D的两种写法是不是就没有区别了?

2.若所有类都源自同一个基类,某个类继承了多个类,想要在此类中只有一份基类数据,那么是不是在这几条继承脉络的第二层都必须用虚继承?
比如:A 是基类 B1 、B2继承自A,C1、C2分别继承自B1、B2,……直到X1、X2 ,然后Y多重继承了X1、X2,那么要想让Y中只有一份A的数据,B1、B2就都必须是虚继承自A?
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
PDD123 2014-12-12
  • 打赏
  • 举报
回复
真是奇怪,一种是基类放在开头,一种是放在末尾。
PDD123 2014-12-12
  • 打赏
  • 举报
回复
谢谢,我想明白了。 在1问中,对于C来说,B是虚基类,那么从C继承而来的类中的B都是虚基类。 而写法1中,C不是虚基类,写法二中C是虚基类。
fly_dragon_fly 2014-12-12
  • 打赏
  • 举报
回复
1. 不是, 跟虚基类不同,虚继承只在本级上,如D,写法1中C不是,写法2才是,由于是单链,所以用起来倒是一样。 2. 是的,跟1说的一样,必须全部,到最终类才有共享一个。 这东西基本上只能拿来做考题用,除非整个类体系从头就设计好,在后续扩展已经不可能。
最坏好男孩 2014-12-12
  • 打赏
  • 举报
回复
1. 虚基类并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的(vitual), 且虚基类的拷贝在内存中只出现一次 2. 一个基类可以在生成一个派生类时作为虚基类,而在生成另一个派生类时不作为虚基类。 3. 为了保证虚基类在派生类中只继承一次,应当在该基类的所有直接派生类中声明为虚基类。 否则仍然会出现对基类的多次继承。 对于问一: 明显两种写法是不一样的,写法1 类C不是虚基类 写法2类C是虚基类 对于问二: 若是要使用A类的数据,可以说必须是的
FightForProgrammer 2014-12-11
  • 打赏
  • 举报
回复
1、‘感觉似的。 很复杂。偶不会了。。帮你顶个

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧