C++中的多继承、虚继承和模板的来由

这是从翁恺那里听到的,他在一个课程里说的。

这得从 B. Stroustrup创始C++开始了!
C++是自由的,所以,B. Stroustrup就觉得,不应该像别的面向对象语言一样,得从一个根类衍生出所有的其它类,就像JAVA,它是从OBJECT类生成所有其它类的。C++不是,它是从几个方面开始的,有几个类在最顶端,它们是平等的!
标准C++的类与组件,逻辑上分为以下几个:
       1、标准C++输入输出类
       2、容器类与ADT(抽象数据类型)
       3、存储管理类
       4、算法
       5、错误处理
       6、运行环境支持
这六大类是处在最顶的,它们是C++使用时都会用到的类。

就因为这样,所以,C++就不能在没有特别添置功能的情况下,制造出容器来!
因为容器本身,就是放置别的对象的,但是,因为C++的类不是从同一个根类继承来的,它们之间没有通性,因此,不能把它们中的任一个做为容器来存放别的对象。
没办法,只有单独再造一个东东来完成容器的任务了!这样,多继承出现了。多继承使得一个类可以从不同的类继承特性,使它成为容器,放置不同类别的对象。但是,由于多继承的出现,使一个特殊情况成为可能:
菱形继承 ,也就是重复继承,称“ 死亡 菱形”。为了使这一情况得到更正,于是出现了“虚继承”,这样,把父父类定义为虚类,在子子类中使用的时候,才不会出现让编译器搞不清状况的情况。
同样,为了让这种特性变得好用些,又加入了类模板!
这可以说是C++在设计时的一点点小缺陷,因为这个,C++才变得像现在这样难于学习。好多情况下都是因为它的它些特性,才会让程序变得这样复杂。这就是我的一点点看法,有不正确的地方,请高手指点下哦!

附:
菱形继承 的情况
比如:一个类A,有一个方法:Print();
有两个类:B和C,都是从A类继承过来的,然后又有一个类D,它是利用多继承从B和C那里派生出来。那么,在D里调用Print()方法时,就会出问题,因为编译器不知道应该用从B那里过来的方法还是调用从C那里过来的,因为它们都是从A来的啊!形成这样一个
菱形
          A                                                   
   B            C                                                           
          D                                                                   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值