资源描述
,*,C+,语言程序设计及编程技术,多重多级继承及虚基类,第七讲、多重多级继承及虚基类,在本单元中您能了解如下知识点:,继承时的二义性产生的时机,同名支配原那么,虚基类的编程规那么,虚基类方式继承时的构造函数设计规那么,访问的二义性,访问时的二义性:对某一函数调用时将有多种可能的形式出现。,class Window,public:Window();Window(int x=0,int y=0,int h=600,int w=800);,;,void main(),Window winA;/,此时系统不知将调用那一种形式的构造函数来实现初始化,这是典型的访问时的二义性问题。但在,多重多级继承时,还会产生另一种形式的访问时的二义性问题。,在多重继承时的二义性,在多重继承时,基类与派生类之间或基类之间出现同名成员时,将出现访问时的二义性。这可采用类名指定或支配原那么来解决访问时的二义性问题。,同名支配覆盖原那么,派生类中的成员名覆盖基类中的同名成员;,调用时未强行指明时那么为派生类中的同名成员;,如访问被覆盖的同名基类成员,应使用基类名加以限定。,在多级继承时的二义性,派生类从多个基类继承派生,而这些基类又从同一个基类派生,那么在访问此共同基类中的成员时,将产生二义性类似生物学中的“近亲繁殖-这可以通过采用虚基类的机制来解决。,虚基类,含义:在派生类的定义时以virtual加以修饰的基类。,定义的语法:请见文档P50。,作用:它主要用来解决多重与多级继承时可能发生的对同一基类继承屡次而产生访问的二义性问题,为最远的派生类提供一份基类的成员而不重复对它产生屡次拷贝,因为此时编译系统将采用优化的编译方式来处理各级派生类的成员。,如何判断是否为虚基类的问题:画出多重与多级继承时的各个类的继承关系链,观察是否有从某一个共同的起点出发,经过不同的途径,最后又集合在一处的结点;此共同的起点基类应为虚基类。,处理的方法:应该将此共同的起点基类设计为虚基类。,带有虚基类最远的派生类的构造函数,特点,虚基类和一般基类的最大的差异在于派生类的构造函数定义一般的基类方式继承时只需要初始化其直接基类。,规那么,最远的派生类的构造函数不仅需要分别对它的直接基类初始化,也需要对共同基类虚基类初始化并且调用其构造函数,编程实例,编程设计出一个CAD绘图工具程序。,本讲的回忆,在本讲的最后对本讲做一个简要的回忆,
展开阅读全文