虚继承

让编程改变世界

Change the world by program


虚继承

前一节的 student 示例程序看起来似乎已经解决了问题,但它存在着一些隐患。 首先,在 TeachingStudent 类的 introduce() 方法里,我们不得不明确地告诉编译器应该使用哪一个属性。 这对于 classes 属性来说是应该的,因为教一门课和上一门课有着本质的区别,而作为常识,助教生教的课程和他学的课程不可能一样!   但是我们再深入考虑下,既然在 TeachingStudent 对象里可以继承两个不同的 classes 属性,那它是不是应该有两个不同的 name 属性呢? 答案:是! 事实上,TeachingStudent 还真可以有两个不同的名字,这肯定不是我们在设计这个类继承模型时所预期的:Example1.cpp(课件及源代码)   TeachingStudent 类继承自 Teacher 和 Student 两个类,因而继承了两组 Person 类的属性,这在某些时候完全有道理,例如 classes 属性。 但它也有可能引起麻烦,例如发生在 name 属性身上的情况。   C++ 发明者也想到了这部分的冲突,因此为此提供了一个功能可以解决这个问题:虚继承(virtual inheritance) 通过虚继承某个基类,就是在告诉编译器:从当前这个类再派生出来的子类只能拥有那个基类的一个实例。

虚继承的语法:

class Teacher : virtual public Person {

}   这样做我们的问题就解决了:让 Student 和 Teacher 类都虚继承自 Person 类,编译器将确保从 Student 和 Teacher 类再派生出来的子类只能拥 有一份 Person 类的属性! 栗子修改:Example2.cpp(课件及源代码)

下节课预告

接下来我们会 hold 住我们的课程先,讲讲关于 ”错误处理和调试” 的内容。 大家也许会问:为什么等到现在才开始讨论错误处理和调试?不是一开始就应该讲这些的吗? 小甲鱼的回答是:不是小甲鱼健忘,而是想要获得这方面的知识和经验,任何手段也比不上你的亲身实践。

避免错误的方法是什么?

永远也不重复犯同样的错误!但这事不可能的! 如果你是一个孜孜不倦、勤奋向上的好童鞋,就应该明白这样一个道理:每个错误都是一个学习如何在今后不继续犯错的好机会! 总而言之,如果在课程一个开始给大家讲这个,这些内容或许只会出现在大家笔记本,最后以一斤三毛钱的价格卖给了收破烂的。 下节课,我们将会讨论一些技巧,并希望它们能帮助大家调试好程序。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://urlxf.qq.com/?UnQbMvz']视频下载[/Downlink] [Downlink href='http://kuai.xunlei.com/d/LPOFILOVOGGP']备胎下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2012/06/12/3847187.html

虚继承 - C++快速入门29相关推荐

  1. 【个人笔记】OpenCV4 C++ 快速入门 29课

    个人资料,仅供学习使用 修改时间--2022年2月19日 15:02:27 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 29 高斯双边模糊 opencv知识点: 高斯双边模 ...

  2. POI3.5 HSSFXSSF Excel 操作快速入门

    POI3.5 HSSF&XSSF Excel  操作快速入门 1 本文翻译自 http://poi.apache.org/spreadsheet/quick-guide.html 欢迎交流指正 ...

  3. C++57个入门知识点_50 菱形继承与虚继承(C++中语法允许多重继承造成菱形继承;会造成近亲结婚的问题;可以通过虚继承的方式解决;实际项目中不多用多重继承)

    上篇C++57个入门知识点_49 多重继承与组合(一个类同时具有多个类的属性的方法:多重继承或者组合:多重继承:一个类同时继承多个类:多重继承构造和析构的顺序与普通继承类似:组合:类中包含多个成员对象 ...

  4. c/c++入门教程 - 2.4.6 继承、公共继承、保护继承、私有继承、virtual虚继承(概念、语法、方式、构造和析构顺序、同名成员处理、继承同名静态成员处理、多继承语法、菱形继承、钻石继承)

    目录 4.6 继承 4.6.1 继承的基本语法 4.6.2 继承方式 4.6.3 继承中的对象模型 4.6.4 继承中构造和析构顺序 4.6.5 继承同名成员处理方式 4.6.6 继承同名静态成员处理 ...

  5. 最新《小甲鱼C++编程快速入门教程》

    这套教程一共40讲,内容真心不错,其实大家看看目录也就能得出结论了  ===============课程目录=============== <鱼C论坛小甲鱼C++编程快速入门培训系列教程> ...

  6. Swift教程Swift语言快速入门(内部资料)

    Swift语言快速入门(内部资料) 试读下载地址:http://pan.baidu.com/s/1eQCGRHw 前言Swift教程Swift语言快速入门(内部资料)Swift教程Swift语言快速入 ...

  7. python快速入门 pdf-Python快速入门 (第3版) PDF 下载

    相关截图: 资料简介: 这是一本Python快速入门书,基于Python 3.6编写.本书分为4部分,*部分讲解Python的基础知识,对Python进行概要的介绍:第二部分介绍Python编程的重点 ...

  8. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  9. 【机器学习】Python 快速入门笔记

    Python 快速入门笔记 Xu An   2018-3-7  1.Python print #在Python3.X中使用print()进行输出,而2.x中使用()会报错 print("he ...

最新文章

  1. mysql update操作
  2. [Android Training视频系列]2.4 Recreating an Activity
  3. 动词变名词的变化规则_动词过去式变化规则 - 点评英语网
  4. RAID技术超详细讲解
  5. 调研了2000位CEO,67%的企业都在数字化转型,想做的无非这3点
  6. 微信小程序消息推送自有服务器无法接收到信息,消息推送服务器配置次数用完的解决方式。
  7. jquery load 事件用法
  8. python调用arcpy函数_python笔记之ArcPy函数列表
  9. 产品开发项目中文档的重要性
  10. vue页面回显数据_解决vue表单回显数据无法修改的问题
  11. 【bzoj5090】组题 分数规划
  12. 如何保证数据库结构的合理性(三、建立可靠的关系)
  13. 华三H3c 交换机 vlan Hybird端口配置
  14. Spring Boot 如何使用拦截器、过滤器、监听器?
  15. [毒]QQ空间出现的伪装QQ登录窗口诈骗
  16. Q6:QIA一站式测试
  17. flex-flex属性
  18. 【ThreeJS基础教程-材质纹理篇】3.1 纹理知识进阶
  19. NTUD3174NZT5G规格参数介绍
  20. RK3326[Android 8.1],获取BT、WIFI地址

热门文章

  1. linux c 获取 多个硬盘序列号_veket系统中使用GParted进行硬盘分区
  2. kNN(k-nearest-neighbor)算法的Python实现
  3. 人脸检测(十九)--人脸检测综述(2018.2)
  4. Android NDK开发之 NDK 局部 全局引用
  5. pmos低电平驱动_三极管和MOS管驱动电路的正确用法
  6. 用python提取图片主要颜色_用Python提取图片主要颜色
  7. android模拟摄像头,android模拟器如何连接摄像头
  8. php封装函数输出,php函数封装
  9. 依赖 netty spring_面试官:如何写好一个 Spring 组件?懵圈!
  10. Azkaban入门简介