跟我学C++语言编程技术——多重多级继承及虚基类_第1页
跟我学C++语言编程技术——多重多级继承及虚基类_第2页
跟我学C++语言编程技术——多重多级继承及虚基类_第3页
跟我学C++语言编程技术——多重多级继承及虚基类_第4页
跟我学C++语言编程技术——多重多级继承及虚基类_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+语言程序设计及编程技术语言程序设计及编程技术多重多级继承及虚基类多重多级继承及虚基类第七讲、多重多级继承及虚基类第七讲、多重多级继承及虚基类 在本单元中您能了解如下知识点:在本单元中您能了解如下知识点:q继承时的二义性产生的时机继承时的二义性产生的时机q同名支配原则同名支配原则q虚基类的编程规则虚基类的编程规则q虚基类虚基类方式继承方式继承时的构造函数设计规则时的构造函数设计规则 访问的二义性访问的二义性访问时的二义性:访问时的二义性:对某一函数调用时将有多种可能的形式出现。对某一函数调用时将有多种可能的形式出现。 class Window public: Window(); Window

2、(int x=0, int y=0, int h=600, int w=800); ; void main() Window winA; /此时系统不知将调用那一种形式的构造函数来实现此时系统不知将调用那一种形式的构造函数来实现初始化,这是典型的访问时的二义性问题。但在初始化,这是典型的访问时的二义性问题。但在多重多重多级继承时多级继承时还会产生另一种形式的访问时的二义性问还会产生另一种形式的访问时的二义性问题。题。 在多重继承时的二义性在多重继承时的二义性 在在多重多重继承时,继承时,基类与派生类基类与派生类之间或之间或基类之间基类之间出现出现同名成员时,将出现访问时的二义性。这可采用同名成

3、员时,将出现访问时的二义性。这可采用类名指定或支配原则来解决类名指定或支配原则来解决访问时的二义性访问时的二义性问题。问题。同名支配(覆盖)原则同名支配(覆盖)原则 q派生类中的成员名覆盖基类中的同名成员;派生类中的成员名覆盖基类中的同名成员;q调用时未强行指明时则为派生类中的同名成员;调用时未强行指明时则为派生类中的同名成员;q如访问被覆盖的同名基类成员,应使用基类名加如访问被覆盖的同名基类成员,应使用基类名加以限定。以限定。在多级继承时的二义性在多级继承时的二义性 派生类从多个基类继承派生,而这些基类又从同一派生类从多个基类继承派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员

4、时,个基类派生,则在访问此共同基类中的成员时,将产生将产生二义性二义性(类似生物学中的(类似生物学中的“近亲繁殖近亲繁殖”)-这可以通过采用虚基类的机制来解决。这可以通过采用虚基类的机制来解决。 虚基类虚基类 q含义:含义:在派生类的定义时以在派生类的定义时以virtual加以修饰的基类加以修饰的基类 。q定义的语法:请见文档定义的语法:请见文档P50。q作用作用:它主要用来解决它主要用来解决多重与多级多重与多级继承时可能发生的继承时可能发生的对对同一基类继承多次同一基类继承多次而产生访问的二义性问题,为最而产生访问的二义性问题,为最远的派生类提供一份基类的成员而不重复对它产生多远的派生类提供

5、一份基类的成员而不重复对它产生多次拷贝,因为此时编译系统将采用优化的编译方式来次拷贝,因为此时编译系统将采用优化的编译方式来处理各级派生类的成员。处理各级派生类的成员。q如何判断是否为虚基类的问题:画出多重与多级继承如何判断是否为虚基类的问题:画出多重与多级继承时的各个类的继承关系链,观察是否有从某一个共同时的各个类的继承关系链,观察是否有从某一个共同的起点出发,经过不同的途径,最后又汇合在一处的的起点出发,经过不同的途径,最后又汇合在一处的结点;此共同的起点(基类)应为虚基类。结点;此共同的起点(基类)应为虚基类。q处理的方法:应该将此共同的起点基类设计为虚基类。处理的方法:应该将此共同的起点基类设计为虚基类。 带有虚基类最远的派生类的构造函数带有虚基类最远的派生类的构造函数 q特点特点 虚基类和一般基类的最大的差别在于派生虚基类和一般基类的最大的差别在于派生类的构造函数定义(一般的基类方式继承时类的构造函数定义(一般的基类方式继承时只需要初始化其直接基类)。只需要初始化其直接基类)。q规则规则 最远的派生类的构造函数不仅需要分别对最远的派生类的构造函数不仅需要分别对它的直接基类初始化,也需要对共同基类它的直接基类初始化,也需要对共同基类(虚基类)初始化并且调用其构造函数(虚基类)初始化并且调

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论