多继承的概念和优缺点

多继承的概念和优缺点解析 实际生活中 一些事物往往会拥有两个或两个以上事物的属性 为了解决这个问题 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 人物索引及最近更新

    人物索引及最近更新按照人物的属性和武器种分类

    2022年6月10日
    47
  • VisiFire示例

    VisiFire示例Syntax:LabelText=”#AxisXLabel,#YValue” /> BelowisthechartaftersettingLabelTextproperty:   Modifiers: Modifier

    2022年7月21日
    15
  • Ubuntu18.04 Cmake升級

    Ubuntu18.04 Cmake升級

    2020年11月8日
    210
  • 互联网100强公布_互联网排行榜

    互联网100强公布_互联网排行榜无意中翻看到一篇我在三年多前写的文章《我看中国互联网web2.0百强名单》,读来颇有感概。2005-2006那两年,正是WEB2.0概念轰轰烈烈的时候,大大小小的新网站层出不穷,博客、视频、交友、评点、社区、聚合……不管自己的网站的UGC比例多少,都宣传自己是WEB2.0,好像不贴上WEB2.0的标签,就不够潮流,不够IN,就吸引不了用户和风投。WEB2….

    2022年9月27日
    5
  • JS日期格式化转换方法

    JS日期格式化转换方法1.将日期转换为指定的格式:比如转换成年月日时分秒这种格式:yyyy-MM-ddhh:mm:ss或者yyyy-MM-dd。当然是网上的方法,只是总结下。可以为Date原型添加如下的方法:Date.prototype.format=function(fmt){varo={“M+”:this.getMonth()+1,…

    2022年6月12日
    30
  • python猪脸识别_JD竞赛,猪脸识别

    python猪脸识别_JD竞赛,猪脸识别pig_faceThisrepositoryisusedtosavethecodeforacompetition1.运行环境Ubuntu16.04python2.7.12cuda8.0cudnn6.0tensorflow1.3.0GPU4*TITANXP2.从视频中截取出猪:(1)为了排除背景数据对模型的影响,我们使用yolo-9000算法提取出视频中每一…

    2022年6月21日
    28

发表回复

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

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