面向对象编程技术第七章派生与继承.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:55 大小:443KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

面向对象编程技术第七章派生与继承.ppt

面向对象编程技术第七章派生与继承.ppt

预览

免费试读已结束,剩余 45 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第七章继承与派生本章主要内容类的继承与派生的提出类的继承与派生的提出派生类的定义与相关概念派生类的定义与相关概念派生类的定义与相关概念派生类的定义与相关概念简化的继承体系图三种基本继承方式classA{public:intx;A(inta,intb){x=a;u=b;}voidprt(){cout<<"publicx=:"<<x<<endl;}private:intu;};举例第二步:定义派生类举例第三步:使用派生类派生类中:基类public和protected成员变成private成员;基类private成员不可访问。通过派生类的对象不能访问基类中的任何成员classA{public:intx;A(inta,intb){x=a;u=b;}voidprt(){cout<<"publicx=:"<<x<<endl;}private:intu;};举例第二步:定义派生类举例第三步:使用派生类3.保护继承(public)protected成员举例protected继承classB:protectedA{public:voidout_base_public(){cout<<"x=:"<<x<<endl;}//voidout_base_private(){cout<<"y=:"<<y<<endl;}Error!voidout_base_proteced(){cout<<"z=:"<<z<<endl;}};voidmain(){Bb;//b.x=19;Errror//b.y=19;Error//b.z=19;Errorb.out_base_public();b.out_base_proteced();}三种继承方式之间的比较派生类的构造与析构函数格式:派生类名::派生类名(参数总表):基类名1(参数),基类名2(参数),...基类名n(参数),内嵌对象1(参数)…内嵌对象n(参数){本类成员初始化赋值语句;};构造函数的调用次序举例:讨论构造函数的调用次序问题classC:publicB2,publicB1,publicB3{public:C(inta,intb,intc,intd):B1(a),memberB2(d),memberB1(c),B2(b){}private:B1memberB1;B2memberB2;B3memberB3;};constructingB22constructingB11constructingB3*constructingB13constructingB24constructingB3*Pressanykeytocontinue对构造函数调用的讨论二、析构函数二、析构函数举例:classB3//基类B3声明{public:B3(){cout<<"constructingB3*"<<endl;}~B3(){cout<<"destructingB3"<<endl;}};classC:publicB2,publicB1,publicB3{public:C(inta,intb,intc,intd):B1(a),memberB2(d),memberB1(c),B2(b){}private:B1memberB1;B2memberB2;B3memberB3;};voidmain(){Cobj(1,2,3,4);}派生类的成员标示与访问举例:派生类的成员标示与访问-同名覆盖原则voidmain(){D1d1;d1.nV=1;//对象名.成员名标识,访问D1类成员,同名覆盖d1.fun();d1.B1::nV=2;//作用域分辨符标识,访问基类B1成员d1.B1::fun();}派生类的成员标示与访问-消除二义性ClassB0{Public:IntnvVoidfun(){…}}classB1:publicB0{public:intnV1;voidfun1(){…}};classB2:publicB0{public:intnV2;voidfun2(){…}};派生类的成员标示与访问-解决二义性问题虚基类虚基类举例:classD1:publicB1,publicB2//派生类D1声明{public://新增外部接口intnVd;voidfund(){cout<<"MemberofD1"<<endl;}};voidmain()//程序主函数{D1d1;//声明D1类对象d1d1.nV=2;//使用直接基类数据成员d1.fun();//使用直接基类函数成员}虚基类及其派生类构造函数虚基类及