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

原文链接: https://www.cnblogs.com/LoveFishC/archive/2012/06/12/3846208.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    虚继承 - C++快速入门29

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/52534

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午3:58
下一篇 2023年2月9日 上午3:59

相关推荐