- 1、本文档共59页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++程序设计语言 第 8 章 继承与多态性; 第8章 继承与多态性8.1 继承与派生8.2 冲突8.3 虚函数与多态性8.4 习题 ● 实验 ● 课堂练习;8.1 继承与派生;8.1.1 派生类;8.1.1 派生类;8.1.1 派生类;8.1.2 派生成员及其访问权限;8.1.2 派生成员及其访问权限;8.1.2 派生成员及其访问权限;8.1.2 派生成员及其访问权限;8.1.2 派生成员及其访问权限;8.1.2 派生成员及其访问权限;8.1.3 派生类构造函数;8.1.3 派生类构造函数;8.1.3 派生类构造函数;8.1.3 派生类构造函数;8.1.3 派生类构造函数;8.1.3 派生类构造函数;8.1.3 派生类构造函数;8.1.3 派生类构造函数;8.1.4 多继承;8.1.4 多继承;8.1.4 多继承;8.1.4 多继承;8.1.4 多继承;8.1.4 多继承;8.1.4 多继承;8.1.5 赋值兼容性;8.1.5 赋值兼容性;8.1.5 赋值兼容性; 通常情况下,一个类中不允许出现名称相同的成员,但派生类中可能出现多个名称相同的成员,这是允许的。因为它们来自不同的类,即作用域不同。
8.2.1 冲突概念1. 冲突 派生类中同时存在来自不同类的,名称相同的成员的现象称为冲突。主要有两种情况:(1)来自不同基类的同名成员同时出现在派生类中;(2)从基类继承来的成员与派生类中的新增成员同名。
来自不同类的同名成员可以用“类名::”加以区分。; 类C有两个x,分别用A::x和B::x表示;有3个y,可以分别用A::y、B::y和C::y 表示。;8.2.1 冲突概念;8.2.1 冲突概念; C++语言使用虚拟继承的方法,解决从不同途径继承来的同名成员出现重复拷贝的问题。
1. 虚基类概念与定义 虚拟继承时,将共同基类设置为虚基类。即定义派生类时,用关键字virtual说明基类。其定义格式为: class 派生类名: virtual 派生方式 基类名 { 新增成员列表 }
或 class 派生类名: 派生方式 virtual 基类名 { 新增成员列表 }
关键字virtual可以放在派生方式前,也可以放在派生方式后。;1. 虚基类的构造函数 从虚基类直接或间接继承的派生类构造函数的头部,必须列出虚基类构造函数的调用,除非虚基类有缺省的构造函数。
例8-8 虚基类的定义及构造函数调用。
程序设计①定义虚基类A,由类A派生出类B和类C。②由类B和类C派生出类D。
源程序代码#includeiostream.hclass A{protected: int a;public: A(int x){ a=x; cout调用类A构造函数\n;}};;class B:public virtual A{protected: int b;public: B(int x,int y):A(y) { b=x; cout调用类B构造函数\n; }};
class C:virtual public A{protected: int c;public:C(int x,int y):A(y) { c=x; cout调用类C构造函数\n; }};
class D:public B,public C{ int d;public: D(int x,int y,int z):B(x+10,y+10),C(x+20,y+20),A(x+y+z) { d=x; cout调用类D构造函数\n; } void show() { couta\tb\tc\td\n;}};;虚基类的间接派生类的构造函数中必须列出其基类和虚基类构造函数的调用;
并且产生间接派生类的对象时,会先调用虚基类的构造函数,然后调用其基类构造函数,最后执行自身构造函数的函数体。
含有对象成员的派生类构造函数和析构函数的调用有如下基本规律:(1)首先调用虚基类的构造函数,多个虚基类时,按照被继承的顺序调用。(2)其次调用基类的构造函数,多个基类时,按照被继承的顺序调用。(3)然后调用对象成员的构造函数,多个对象时,按照对象申明的顺序调用。(4)最后执行派生类自己构造函数的函数体。(5)析构函数的调用顺序通常与构造函数的调用顺序相反。; 8.3.1 静态与动态联编 联编是指程序自身彼此关联的过程,即将模块或者函数合并在一起,并分配调用的内存地址,生成
文档评论(0)