- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1.5 赋值兼容性 赋值兼容性是把派生类中从基类继承来的成员赋给基类的对应成员,使用时注意: (1)赋值兼容性是单向赋值,即只能是派生类向基类赋值;而不能基类向派生类赋值,因为派生类的新增成员将得不到值。 (2)赋值兼容性只有在公有派生时才成立,因为非公有派生会改变成员的的访问属性。 (3)指向派生类对象的基类指针通常只能使用派生类对象中从基类继承来的成员,而不能访问派生类中的新增成员,除非该新增成员是虚函数。 通常情况下,一个类中不允许出现名称相同的成员,但派生类中可能出现多个名称相同的成员,这是允许的。因为它们来自不同的类,即作用域不同。 8.2.1 冲突概念1. 冲突 派生类中同时存在来自不同类的,名称相同的成员的现象称为冲突。主要有两种情况:(1)来自不同基类的同名成员同时出现在派生类中;(2)从基类继承来的成员与派生类中的新增成员同名。 来自不同类的同名成员可以用“类名::”加以区分。 8.2 冲突 类C有两个x,分别用A::x和B::x表示;有3个y,可以分别用A::y、B::y和C::y 表示。 8.2.1 冲突概念 基类A a x y 派生类C 新 c 增 y 基类B b x y a x y A b x y B 2.支配规则 当派生类中新增的成员与从基类继承来的成员同名时,在没有使用作用域运算符时缺省指代的是派生类中新增的同名成员,这种优先关系称为支配规则。 其中C::y 可直接表示为y。 8.2.1 冲突概念 例8-7 冲突与支配规则。 class A{ protected: int a,x,y;public: A(){ a=1; x=2; y=3; }}; class B{ protected: int b,x,y;public: B(){ b=4; x=5; y=6; }}; class C:public A,public B{ int c,y;public: C(){ c=7; y=8; } void show() { couta=a“,b=b“,c=c\n; coutA::x=A::x“,B::x=B::x\n; coutA::y=A::y“,B::y=B::y“,C::y=y\n; }}; void main() { C t; t.show(); } t 新 c 7 增 y 8 a 1 x 2 y 3 A b 4 x 5 y 6 B 程序输出为: a=1,b=4,c=7 A::x=2,B::x=5 A::y=3,B::y=6,C::y=8 注:A、B、C三个类中均有缺省的构造函数。 8.2.1 冲突概念 没有冲突时,可直接使用派生成员和新增成员。 多基类继承时的冲突,必须在冲突成员前用基类名和作用域运算符指出其所属的类,否则会产生二义性。 若从基类继承来的派生成员与派生类中的新增成员重名,缺省引用的是新增成员。 因冲突产生的二义性通常可以通过类名和作用域运算符解决,但同一个基类经过多级继承后会出现用“类名::”无法解决的冲突。 A::a 派生类D 派生类B A::a 基类A a 派生类C A::a A::a 类D中就会出现类A的两个拷贝,但不能写成B::a、C::a或B::A::a、C::A::a。 C++语言使用虚拟继承的方法,解决从不同途径继承来的同名成员出现重复拷贝的问题。 1. 虚基类概念与定义 虚拟继承时,将共同基类设置为虚基类。即定义派生类时,用关键字virtual说明基类。其定义格式为: class 派生类名: virtual 派生方式 基类名 { 新增成员列表 } 或 class 派生类名: 派生方式 virtual 基类名 { 新增成员列表 } 关键字virtual可以放在派生方式前,也可以放在派生方式后。 8.2.2 虚基类 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;}}; 8.2.2 虚基类 class B:public virtual A{protected: int b;public: B(int
您可能关注的文档
- 第5章脉冲信号的产生与整形重点.ppt
- 第7章语义分析和中间代码产生重点.ppt
- 第7章指针重点.ppt
- 第7章智能技术在传感器系统中的应用-补充内容重点.ppt
- 采油树知识学习剖析.ppt
- 第7章中断与程序设计重点.ppt
- 桥梁施工技术规范重点.doc
- 第5章门电路和组合逻辑电路重点.ppt
- 第3章C语言数据存储与运算重点.ppt
- 第7章总线重点.ppt
- 中考语文总复习语文知识及应用专题5仿写修辞含句子理解市赛课公开课一等奖省课获奖课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第二课《藏猫猫》精品课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第三课《我向国旗敬个礼》精品课件.pptx
- 高中生物第四章生物的变异本章知识体系构建全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 整数指数幂市公开课一等奖省赛课微课金奖课件.pptx
- 一年级音乐上册第二单元你早全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级数学上册第二章实数27二次根式第四课时习题省公开课一等奖新课获奖课件.pptx
- 九年级物理全册11简单电路习题全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级语文下册第五单元19邹忌讽齐王纳谏省公开课一等奖新课获奖课件.pptx
- 2024年秋季新人教PEP版3年级上册英语全册教学课件 (2).pptx
文档评论(0)