多继承的概念和优缺点

多继承的概念和优缺点解析 实际生活中 一些事物往往会拥有两个或两个以上事物的属性 为了解决这个问题 C 引入了多重继承的概念 C 允许为一个派生类指定多个基类 这样的继承结构被称做多重继承 举个例子 人 Person 可以派生出作者 Author 和程序员 Programmer 然而程序员作者同时拥有作家和程序员的两个属性 即既能编程又能写作 使用多重继承的例子程序如下 nbsp nbsp nbsp nbsp nbsp nbsp nbsp in

解析:
       实际生活中,一些事物往往会拥有两个或两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。举个例子:
       人(Person)可以派生出作家(Author)和程序员(Programmer),然而程序员作者同时拥有作家和程序员的两个属性,即既能编程又能写作,如下图所示。 

多继承的概念和优缺点

       多重继承的优点很明显,就是对象可以调用多个基类中的接口,如代码31行与代码32行对象pa分别调用Author类的writeBook()函数和Programmer类的writeCode()函数。
       多重继承的缺点是什么呢?如果派生类所继承的多个基类有相同的基类,而派生类对象需要调用这个祖先类的接口方法,就会容易出现二义性。代码33、34行就是因为这个原因而出现编译错误的。因为通过多重继承的Programmer_Author类拥有Author类和Programmer类的一份拷贝,而Author类和Programmer类都分别拥有Person类的一份拷贝,所以Programmer_Author类拥有Person类的两份拷贝,在调用Person类的接口时,编译器会不清楚需要调用哪一份拷贝,从而产生错误。对于这个问题通常有两个解决方案:
(1)加上全局符确定调用哪一份拷贝。比如pa.Author::eat()调用属于Author的拷贝。
(2)使用虚拟继承,使得多重继承类Programmer_Author只拥有Person类的一份拷贝。比如在11行和17行的继承语句中加入virtual就可以了。
      



 class Author : virtual public Person //Author虚拟继承自Person class Programmer : virtual public Person //Programmer虚拟继承自Person

 

原文:http://blog.sina.com.cn/s/blog_5396eb530100mtc9.html

多继承的概念和优缺点

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231939.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • INS-20802 Oracle Cluster Verification Utility failed解释说明[通俗易懂]

    INS-20802 Oracle Cluster Verification Utility failed解释说明

    2022年4月2日
    174
  • C++实现二叉树层序遍历

    C++实现二叉树层序遍历层序遍历图示实现二叉树的层次遍历,要利用到队列。基本思想:1.先将根节点放到队列中2.根节点弹出队列,然后将根节点的左、右儿子入队3.弹出左儿子,放入左儿子的左右儿子4.弹出右儿子,放入右儿子的左右儿子5.重复3、4步图示过程:所用的二叉树如下队列的操作:将根节点弹出,放入左右儿子:将B节点弹出,放入左右儿子(只有右儿子):把D节点弹出,放入左右儿子:C、E、F都没有儿子节点,所以直接弹出队列即可: C++代码实现1.利用前序遍历思想输入二叉树。(前序

    2022年5月21日
    28
  • Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝!

    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝!SpringCloudGreenwich正式版在01/23/2019这天正式发布了,下面我们来看下有哪些更新内容。生命周期终止提醒SpringCloudEdgwareEdgware版本将于08/01/2019正式退役,具体可以参考官方宣布:https://spring.io/blog/2018/07/30/spring-cloud-edgware-eol-aug…

    2025年8月3日
    2
  • C语言基础:哪儿来的32766

    这篇文章通过一个简单的示例程序来介绍一下如何结合使用IDE来学习C语言。

    2022年4月4日
    51
  • risc系统服务器,RISC架构三款处理器

    risc系统服务器,RISC架构三款处理器富士通在去年8月份的HotChips24大会上发布了其Sparc架构的16核处理器Sparc64-X,与此同时,甲骨文也发布了同样为Sparc架构的16核心处理器SparcT5,IBM的Power7+也是在此次大会上发布的。HotChips24三款CPU主题演讲IBM的Power7+采用的32nm支持工艺,8核心,最高主频超过5GHz,已经在IBM大型机ZzEnterpriseEC1…

    2025年8月19日
    3
  • Python面试题之基础篇(二)[通俗易懂]

    PHP中文网给大家总结了Python面试题,本文只是一些基础问题,以供大家学习。例如:python递归的最大层数;ascii、unicode、utf-8、gbk区别;字节码和机器码的区别;三元运算写法和应用场景,等等。

    2022年1月18日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号