游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: kevinlynx

C++里的多继承~不明白~

[复制链接]

38

主题

275

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
 楼主| 发表于 2006-3-12 11:06:00 | 显示全部楼层

Re:C++里的多继承~不明白~

~对于继承,我同意william9527的堆砌说法,但是我这里的问题是,其实我觉得那一句CA::m_a是具有二义性的-----按照堆砌的说法----
我在VC6下在return 0;处设置断点,调试执行到这个地方,看调试拦里的信息如下:
     cd
          CB
                CA
                       m_a
          CC
                 CA
                        m_a
   由此看出,CA::m_a肯定是具有二义性的。但是为什么能在VS2005EE下通过编译呢?这个其实跟编译器自己的规定有关,于是我把代码放到VS2005EE下执行,看了输出结果。
  CA::m_a输出就为10,难道跟CD继承CC,CB的先后有关系?------正如william9527
所说,CB比CC先被继承。于是我改动代码:
   class  CD:private CC,private CB
  {
     .....
  };
  看看结果,结果就输出了CA::m_a=20,哈哈,由此看来,在VS2005EE中,这种情况由于本身具有二义性,编译器为了方便大家-----我觉得反而是害了大家---它就会默认是先继承的那个,也即:
  假如CB先被继承,CA::m_a就等同于:CB::CA::m_a,反之就为CC!
  我想现在大家应该明了了吧!
  谢谢回帖!

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2006-3-12 14:48:00 | 显示全部楼层

Re:C++里的多继承~不明白~

我的vs2003的光盘找不见了,那位兄弟有的话测试一下,顺便看看汇编结果。

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-3-13 02:27:00 | 显示全部楼层

Re:C++里的多继承~不明白~

恐怖棱形,能避免就避免吧。本来面向对象设计就不提倡多继承,更何况这种。不过有时候可以用虚基类来解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 21:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表