zoukankan      html  css  js  c++  java
  • 虚继承 C++快速入门29

    虚继承

     

    让编程改变世界

    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]
  • 相关阅读:
    UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别(转)
    术语汇编 UML用例图简介
    jquery常用的插件1000收集 (转)
    mvc1,mvc2,mvc3有什么区别
    web框架技术 内容页调用 左边菜单页面 函数
    概要设计说明书(转)
    hover事件同时挂2个方法
    Microsoft Team Foundation Server 2010安装 与 序列号
    GridView 技巧(转)
    原核生物与真核生物
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3847187.html
Copyright © 2011-2022 走看看