虚继承 - 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]

你可能感兴趣的:(快速入门)