免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
打印 上一主题 下一主题

[C++] 多重继承必须用虚拟继承? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-09-26 14:31 |只看该作者
本帖最后由 sonicling 于 2012-09-26 14:36 编辑
egmkang 发表于 2012-09-26 14:15
这不是问题,你可以选择保留其他几份实现,因为那几份实现可能对你有意义.
C++通过虚拟继承解决的问题是,其他 ...


lz只想要个长安小货车,你却给了他一个擎天柱,他觉得擎天柱问题非常严重,拖斗太大,小滚珠太占地方,还有就是拖斗居然可以和车头断开,万一路上拖斗掉了怎么办,真suck。

论坛徽章:
0
12 [报告]
发表于 2012-09-26 16:04 |只看该作者
看热烈讨论

论坛徽章:
0
13 [报告]
发表于 2012-09-26 16:58 |只看该作者
回复 10# egmkang


    那些副本没用吧,可想而知C++产生多少没用的东西,我们不知道的还不知多少呢。

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
14 [报告]
发表于 2012-09-26 17:00 |只看该作者
边学CPP边骂CPP 发表于 2012-09-26 16:58
回复 10# egmkang


这说不准的.

论坛徽章:
0
15 [报告]
发表于 2012-09-26 17:02 |只看该作者
回复 14# egmkang


    呵呵,作为一门语言,如果有很多说不准,那么谁还敢相信它。

论坛徽章:
0
16 [报告]
发表于 2012-09-26 20:55 |只看该作者
确定不会有副本产生的时候我难道还高兴编译器给我自作主张加virtual?virtual以后能随便静态downcast/crosscast?

论坛徽章:
0
17 [报告]
发表于 2012-09-26 21:37 |只看该作者
这个问题C++粉丝答不上来了?

论坛徽章:
0
18 [报告]
发表于 2012-09-27 05:32 |只看该作者
边学CPP边骂CPP 发表于 2012-09-26 00:10
当在多条继承路径上有一个公共的基类时,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),

当然只想保存这个基类的一个实例了,不可能希望这个基类有多个副本吧??? 所以多重继承必须用虚拟继承,对么?

如果回答是肯定的,那么就要质问C++:为什么让程序员费力做这些繁琐的工作,而不自动处理?

不好意思,回答是否定的。
给你举一个例子:
  1. #include <cstddef>

  2. template<typename T, std::size_t N>
  3. struct oxy : oxy<T,N-1> {};

  4. template<typename T>
  5. struct oxy<T,0> : T {};

  6. struct b{};
  7. struct b1 : b {};
  8. struct b2 : b {};

  9. struct b3 : oxy<b1, 1>, oxy<b2, 2> {};

  10. int main()
  11. {
  12.     b3 sfdoifdfsdoij3498yuasflhijoasflio;
  13.     return 0;
  14. }
复制代码

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
19 [报告]
发表于 2012-09-27 09:28 |只看该作者
边学CPP边骂CPP 发表于 2012-09-26 17:02
回复 14# egmkang


你别用C++了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP