ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:16.38KB ,
资源ID:10216706      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10216706.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(继承与派生二.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

继承与派生二.docx

1、继承与派生二/类型兼容规则举例。本例演示子类对象(指针)可赋给父类对象(指针),/但:通过基类的对象名、指针只能使用从基类继承的成员#include using namespace std;class B0 /基类B0声明 public: void display()cout这是基类 B0 的display()endl;/公有成员函数;class B1: public B0 public: void display()cout这是一级子类 B1 的display()endl; ;class D1: public B1 public: void display()cout这是二级子类 D1 的d

2、isplay()display(); /对象指针-成员名 void main(void) B0 b0; /声明B0类对象 B1 b1; /声明B1类对象 D1 d1; /声明D1类对象 B0 *p; /声明B0类指针 p=&b0; /B0类指针指向B0类对象 fun(p); p=&b1; /B0类指针指向B1类对象 fun(p); p=&d1; /B0类指针指向D1类对象 fun(p);/多继承示例,本例中 类C 从 类A和类B继承#include using namespace std;class Apublic: void setA(int); void showA();private:

3、int a;class Bpublic: void setB(int); void showB();private: int b;class C : public A, private Bpublic: void setC(int, int, int); void showC();private: int c;void A:setA(int x) a=x; void B:setB(int x) b=x; void C:setC(int x, int y, int z) /派生类成员直接访问基类的公有成员 setA(x); /基类 A 的 公有成员 setB(y); /基类 B 的 公有成员 c

4、=z;/其它函数实现略void main(void) C obj; obj.setA(5); obj.showA(); obj.setC(6,7,9); obj.showC();/ obj.setB(6); 错误,原因:C 是通过私有方式继承 B,B中的公有成员相当 /于C的私有成员,不能通过对象访问(对象指针也不可以)/ obj.showB(); 错误,原因同上/单一继承时的构造函数举例。本例演示了子类构造函数如何向基类构造函数传/递参数,同时需注意子类C中的Print函数式如何复用基类功能的#include using namespace std;/-/类B 的定义/-class B pu

5、blic: B(); B(int i); B(); void Print() const; private: int b;/-B:B() b=0; coutB的默认构造函数被调用.endl;/-B:B(int i) b=i; coutB的带参构造函数被调用. endl;/-B:B() coutB的析构函数被调用.endl; /-void B:Print() const coutB:Print()被调用 b=bendl; /-/类 C 的定义/-class C:public B public: C(); C(int i,int j); C(); void Print() const; priva

6、te: int c;/-C:C() c=0; coutC 的默认构造函数被调用.endl;/-C:C(int i,int j):B(i) /重点:子类C的构造函数给基类构造函数传递参数 i c=j; coutC 的带参构造函数被调用.endl;/-C:C() coutC 的析构函数被调用.endl; /-/注意:这是面向对象常用的招数:需要增加子类新的功能,但又需要用到基类的相关/功能,则覆盖基类函数,方法是:1、先完整的引用基类函数;2、添加新功能/这就实现了代码复用void C:Print() const B:Print(); coutcendl; /-void main() C objC

7、(5,6); /思考此处定义 C 的对象objC时,将发生什么? objC.Print();/多继承且有内嵌对象时的构造函数#include using namespace std;/-/类 B1 的定义/-class B1 /基类B1,构造函数有参数public: B1(int i) cout B1构造函数 iendl;/-/类 B2 的定义/-class B2 /基类B2,构造函数有参数public: B2(int j) cout B2 构造函数jendl;/-/类 B3 的定义/-class B3 /基类B3,构造函数无参数public: B3()coutB3 构造函数endl;/-/类

8、 C 的定义,注意其特殊性,一是从三个基类继承,二是有三个内嵌对象/定义C的构造函数时,必须对不存在无参构造函数的基类构造函数传递参数,/同时对不存在无参构造函数的对象成员传递参数/思考1、C的构造函数似乎没对memberB3初始化?/思考2、C的构造函数若定义成如下方式,有何问题?/ C(int a, int b, int c, int d):B1(a),memberB1(c),B2(b)/观察:程序运行后基类构造函数调用次序(包括成员对象初始化对构造函数的调用)/-class C: public B2, public B1, public B3 public: /派生类的公有成员 C(in

9、t a, int b, int c, int d):B1(a),memberB2(d),memberB1(c),B2(b) private: /派生类的私有对象成员 B1 memberB1; B2 memberB2; B3 memberB3;void main() C obj(1,2,3,4); /派生类析构函数举例#include using namespace std;/-class B1 /基类B1声明 public: B1(int i) cout B1 构造 iendl; B1() cout B1 析构endl;/-class B2 /基类B2声明public: B2(int j) c

10、out B2 构造jendl; B2() cout B2 析构endl; ;/-class B3 /基类B3声明public: B3()cout B3 构造endl; B3() cout B3析构 endl; ;/-class C: public B2, public B1, public B3 public: C(int a, int b, int c, int d): B1(a),memberB2(d),memberB1(c),B2(b)private: B1 memberB1; B2 memberB2; B3 memberB3;/-void main() C obj(1,2,3,4);

11、/-/同名隐藏示例,注意子类D1在同名覆盖情况下是如何访问基类成员的#include using namespace std;/-class B1 /声明基类B1 public: /外部接口 int nV; void fun() coutB1 的成员函数 funendl;/-class B2 /声明基类B2 public: /外部接口 int nV; void fun()coutB2 的成员函数 funendl;/-class D1: public B1, public B2 public: int nV; /同名数据成员 void fun()coutD1 的成员函数 funendl; /同名函数成员;/-void main() D1 d1; d1.nV=1; /对象名.成员名标识, 访问D1类成员 d1.fun(); d1.B1:nV=2; /作用域分辨符标识, 访问基类B1成员 d1.B1:fun(); d1.B2:nV=3; /作用域分辨符标识, 访问基类B2成员 d1.B2:fun();

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2