多继承的概念和优缺点

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


相关推荐

  • noip2012提高组初赛_noip2018提高组初赛解析

    noip2012提高组初赛_noip2018提高组初赛解析Noip2012参赛总结又一年NOIP考完了。刚刚才看了去年自己写的参赛总结,有点后悔考试之前没有看。里面有一句话“NOIP给的数据都是白痴的,一定要多测几组自己的数据,尽管有些数据你相信你的程序一定能过。但往往正是这些数据暴露出了你程序的不足。”对于DAY1的第二题。我想用深搜来做,尽管我知道过不了多少个点,但总比没有好。于是就以很快的速度敲完了深搜,测了两组数据就去做第三题了。离考试

    2022年8月22日
    7
  • 【愚公系列】2022年03月 微信小程序-富文本编辑器

    【愚公系列】2022年03月 微信小程序-富文本编辑器<viewclass=”container”style=”height:{{editorHeight}}px;”><editorid=”editor”class=”ql-container”placeholder=”{{placeholder}}”bindstatuschange=”onStatusChange”bindready=”onEditorReady”></editor></view><scroll-views

    2022年6月10日
    35
  • vbs代码未结束的字符串常量[通俗易懂]

    vbs代码未结束的字符串常量问题描述:  执行vbs脚本时提示“vbs代码未结束的字符串常量”原因:  vba的BUG,在连接字符串的最后一个字符是单个或多个“行”字(我这里是把“行”字删除就不报错)或者其他原因,会出现未结束的字符串常量解决:  这里使用的是notepadd++在编码或者格式里面将文件编码改成“转为ANSI编码”解决问题…

    2022年4月9日
    253
  • Github搭建个人博客(2019最新版,亲测)

    Github搭建个人博客(2019最新版,亲测)版权声明:本文为徐代龙原创文章,未经徐代龙允许不得转载。https://blog.csdn.net/xudailong_blog/article/details/78762262(一)前言:建议:慢慢看,也就这一篇用心了点写说来话长,一把辛酸泪,可算是弄好了。1起因:在很早很早,大一的时候,估计快记不得日子了,那时候来到PC吧创业团队,一个大一级的学长通过…

    2022年5月27日
    34
  • Redis面试题(一): Redis到底是多线程还是单线程?

    Redis面试题(一): Redis到底是多线程还是单线程?0.redis单线程问题单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。1.为什么说redis能够快速执行(1)绝大部分请求是纯粹的内存操作(非常快速)(2)采用单线程,避免了不必要的上下文切换和竞争条件(3)非阻塞IO-IO多路复用2.redis的内部实现 内部实现采用epoll,采用了epoll+自己…

    2022年5月3日
    62
  • 织梦后台栏目显示文档数不为0,但点进去之后什么都没有

    织梦后台栏目显示文档数不为0,但点进去之后什么都没有

    2021年9月19日
    44

发表回复

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

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