(CC++语言程序设计)第11章 派生类与继承.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11.3 多重继承 多重继承: 一个派生类具有多个基类。 在多重继承中,公有继承和私有继承对于基类成员在派生类中的可访问性与单继承相同。 玩具 车 玩具车 class 派生类名:继承方式1 基类名1,…,继承方式n 基类名n { 派生类新定义成员 }; 11.3.1 多重继承的声明 例11.9 声明多重派生。 #includeiostream.h class X{ int a; public: void setX(int x) {a=x;} void showX(){ couta=aendl;} }; class Y{ int b; public: void setY(int y) {b=y;} void showY() { coutb=bendl;} }; class Z:public X,private Y{ int c; public: void setZ(int x,int y) { c=x; setY(y); } void showZ() { showY(); coutc=cendl; } }; void main() { Z obj; obj.setX(3); obj.showX(); //obj.setY(4); //obj.showY(); obj.setZ(6,8); obj.showZ(); } 二义性 对基类成员的访问必须是无二义性的。 消除下例中的二义性,可写为 obj.X::f(); //调用类X的f() obj.X::f(); //调用类Y的f() 例11.10多重继承时,对基类访问存在二义性的情况。 #includeiostream.h class base1{ public: void show() { } }; class base2{ public: void show() { } }; class derive:public base1, private base2{ public: void showderive () { } }; void main() { derive obj; obj.show(); //二义性错误,不知调用的是 //base1的show() //还是base2的show() } 11.3.2 多重继承的构造函数 多重继承构造函数定义的一般形式如下: 派生类构造函数名(参数表):基类构造函数名1(参数表),基类构造函数名2(参数表),…,基类构造函数名n(参数表) { //派生类中其它数据成员初始化 } 【例11.8 】含有对象成员的派生类构造函数的执行情况。 #include iostream.h class base{ int x; public: base(int a) { cout基类的构造函数endl; x=a; } ~base() { cout基类的析构函数endl;} void showx() { coutxendl; } }; class derived:public base{ public: base d; //d为基类对象,作为派生类的对象成员 derived(int a,int b):base(a),d(b) //派生类的构造函数,缀上基类构造函数 //和对象成员的构造函数 { cout派生类的构造函数endl; } ~derived() { cout派生类的析构函数endl;} }; void main() { derived obj(10,20); obj.showx(); obj.d.showx(); } 11.4 虚基类 当引用派生类的成员时,首先在派生类自身的作用域中寻找这个成员,如果没有找到,则在它的基类中寻找。如果一个派生类是从多个基类派生出来的,而这些基类又有一个共同的基类,则在这个派生类中访问这个共同的基类中的成员时,可能会产生二义性。 virtual 关键字,同继承方式关键字的先后顺序无关紧要。 【例11.12 】多重派生产生二义性的情况 #includeiostream.h class base{ protected: int a; public: base() {a=5;} }; class base1:public base{ public: base1() {c

文档评论(0)

autohhh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档