- 0
- 0
- 约1.11万字
- 约 51页
- 2019-05-06 发布于广东
- 举报
(续) (续) 它的一般形式如下: 例 6-6 消除二义性 #includeiostream.h class A { public: int x; void fun(){cout″调用类A成员函数″endl;} }; class B { public: int x; void fun(){cout″调用类B成员函数″endl;} }; class C:public B,public A { public: void funC(){cout″调用类C成员函数″endl;} }; 例 6-8 int main() { C c; c.A::x=1; c.B::x=2; cout″Xa=″c.A::x″\tXb=″c.B::xendl; c.A::fun(); c.B::fun(); return 0; } Xa=1 Xb=2 调用类A成员函数 调用类B成员函数 由于存在二义性,所以一个类不能直接从同一类继承一次以上。 (续) 比如: class person {…}; class couple:public person,public person { ... }; 比如:上面的声明改写 class person { ... }; class couple { person husband,wife; ... }; 说明:根本就没有办法访问person类中的成员。 放弃继承的方式,而采用在类中使用对象成员的方法来解决。 比如:class A { public: int a; void fun(){} }; class B:public A { public: void funb(){} }; class C:public A { public: void func(){} }; 一个派生类由多个基类派生而来,而这多个基类中的部分或全部又有一个公共的基类,则这些具有公共基类的多个直接基类,从上一级公共基类中继承而来的成员就有相同的名称。 在派生类中访问这些公共基类成员时,就存在二义性问题。 class D:public B,public C { public: void fund(){} }; int main() { D d; d.fun(); //存在二义性 d.a=0; //存在二义性 return 0; } 消除公共基类二义性 #includeiostream.h class A { public: int a; void fun(){cout″类A成员函数被正确调用″endl;} }; A 类D的派生过程图 公共基类 A B C D 例 6-9 class B:public A { public: void display() { cout″Ab=″aendl; } }; class C:public A { public: void display() { cout″Ac=″aendl; } }; class D:public B,public C { public: void display() (续) * 6.1 继承与派生 6.2 单继承 6.2.1 公有派生 6.2.2 私有派生 6.2.3 保护派生 6.3 多继承 6.4 派生类的构造函数与析构函数 6.5 二义性问题 6.6 虚基类 6.7 赋值兼容原则 第 6章继承 本章介绍继承的基本知识:单继承、多继承、公有派生、私有派生和保护派生;讨论派生类的构造函数、析构函数及多继承中的二义性问题;并详细讲解虚基类和赋值兼容原则。 可以把继承过程看成是从一个类派生出一个新类的过程。派生出来的新类称为派生类或子类;而被继承的类称作基类或父类。 一个基类可以派生出多个派生类,一个派生类也可以由多个基类派生而来。称从一个基类派生出一个
您可能关注的文档
最近下载
- 运筹学题库及答案.doc VIP
- 2012江苏高考数学试卷(含答案).doc VIP
- 2018江苏高考数学.doc VIP
- 多因素身份验证系统设计与实现.docx VIP
- 新概念英语第一册上半册 Lesson15-16 课件.ppt VIP
- 2025 年剖宫产术后护理的最新要点与技巧.docx VIP
- 医院科室排班表.docx VIP
- 楼宇低压配电系统的设计.doc VIP
- 【电脑小知识】:如何使用注册表来恢复误删的Win7便签?.docx VIP
- 班子(在带头强化政治忠诚、提高政治能力;在带头固本培元、增强党性;在带头敬畏人民、敬畏组织、敬畏法纪;在带头干事创业、担当作为;在带头坚决扛起管党治党责任)存在不足.docx VIP
原创力文档

文档评论(0)