当前位置:鱼C工作室 >C++ > 查看文章

虚继承 – 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 住我们的课程先,讲讲关于 ”错误处理和调试” 的内容。

大家也许会问:为什么等到现在才开始讨论错误处理和调试?不是一开始就应该讲这些的吗?

小甲鱼的回答是:不是小甲鱼健忘,而是想要获得这方面的知识和经验,任何手段也比不上你的亲身实践。

 

避免错误的方法是什么?

 

永远也不重复犯同样的错误!但这事不可能的!

如果你是一个孜孜不倦、勤奋向上的好童鞋,就应该明白这样一个道理:每个错误都是一个学习如何在今后不继续犯错的好机会!

总而言之,如果在课程一个开始给大家讲这个,这些内容或许只会出现在大家笔记本,最后以一斤三毛钱的价格卖给了收破烂的。

下节课,我们将会讨论一些技巧,并希望它们能帮助大家调试好程序。


为您推荐

报歉!评论已关闭.