欢迎来到天天文库
浏览记录
ID:44986910
大小:510.00 KB
页数:91页
时间:2019-11-06
《第8章 继承性和派生类》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C++程序设计第8章 继承性和派生类8.1基类和派生类8.2单继承8.3多继承8.4虚基类8.5冲突、支配规则和赋值兼容规则主要内容基类和派生类类的继承与派生是指:新类继承了原有类的特征,或者由原有类派生出新类。原有类:基类或父类。新类:派生类或子类。派生新类的过程一般包括三个步骤:吸收原有类的成员;调整原有类的成员;添加新的成员。一、派生类的定义class派生类名:继承方式基类名1,…,继承方式基类名n{派生类成员定义;};基类和派生类单继承:派生类只有一个基类的情况。多继承:派生类同时有多个基类的情况。继承方式
2、:访问控制的方式(public,protected,private),缺省情况下,认为是private继承。一个多继承实例:classDr1:publicBase1,privateBase2{public:Dr1();~Dr1();};基类和派生类二、派生类的生成过程1、继承基类成员除构造函数、析构函数之外,其余的所有成员都被继承。2、改造基类成员改造基类成员的访问控制:依靠定义派生类时的继承方式实现。覆盖基类成员:在派生类中定义与基类成员同名的成员,发生同名覆盖。3、添加新成员单继承继承方式2派生类构造函数和析构
3、函数一、公有继承:基类成员与派生类成员的关系:基类派生类public派生黄色:为基类中的私有成员,也为派生类的不可访问成员浅红色:为派生类中特有成员橙色:为基类的公有成员,也成为派生类的公有成员深红色:为基类中的保护成员,也成为派生类的保护成员为基类及派生类、派生子类成员访问为任何类成员访问只为基类成员访问单继承-继承方式基类的私有成员不可访问,基类的其它成员的访问属性不变。例8.1公有继承#include//基类Point类的定义classPoint{public:voidInitP(fl
4、oatxx=0,floatyy=0){X=xx;Y=yy;}voidMove(floatxOff,floatyOff){X+=xOff;Y+=yOff;}floatGetX(){returnX;}floatGetY(){returnY;}private:floatX,Y;};例8.1公有继承例8.1公有继承//派生类声明部分classRectangle:publicPoint{public://新增公有函数成员voidInitR(floatx,floaty,floatw,floath){InitP(x,y);W=w
5、;H=h;}//调用基类公有成员函数给基类私有成员赋值,然后给新增私有成员赋值floatGetH(){returnH;}floatGetW(){returnW;}private://新增私有数据成员floatW,H;};voidmain(void){Rectanglerect;//定义Rectangle类的对象rect.InitR(2,3,20,10);//设置矩形的数据例8.1公有继承rect.Move(3,2);//移动矩形位置cout<<"tThedataofrect(X,Y,W,H):"<6、ut<<"t"<7、成员private派生为基类及派生类成员访问只为基类及派生类成员访问只为基类成员访问单继承-继承方式#includeclassPoint//基类声明{public:voidInitP(floatxx=0,floatyy=0){X=xx;Y=yy;}voidMove(floatxOff,floatyOff){X+=xOff;Y+=yOff;}floatGetX(){returnX;}floatGetY(){returnY;}private:floatX,Y;};classRectangle:p8、rivatePoint//派生类声明{public://新增外部接口例8.2私有继承1例8.2私有继承1voidInitR(floatx,floaty,floatw,floath){InitP(x,y);W=w;H=h;}//派生类访问基类公有成员voidMove(floatxOff,floatyOff){Point::Move(xOff,yOff);}fl
6、ut<<"t"<7、成员private派生为基类及派生类成员访问只为基类及派生类成员访问只为基类成员访问单继承-继承方式#includeclassPoint//基类声明{public:voidInitP(floatxx=0,floatyy=0){X=xx;Y=yy;}voidMove(floatxOff,floatyOff){X+=xOff;Y+=yOff;}floatGetX(){returnX;}floatGetY(){returnY;}private:floatX,Y;};classRectangle:p8、rivatePoint//派生类声明{public://新增外部接口例8.2私有继承1例8.2私有继承1voidInitR(floatx,floaty,floatw,floath){InitP(x,y);W=w;H=h;}//派生类访问基类公有成员voidMove(floatxOff,floatyOff){Point::Move(xOff,yOff);}fl
7、成员private派生为基类及派生类成员访问只为基类及派生类成员访问只为基类成员访问单继承-继承方式#includeclassPoint//基类声明{public:voidInitP(floatxx=0,floatyy=0){X=xx;Y=yy;}voidMove(floatxOff,floatyOff){X+=xOff;Y+=yOff;}floatGetX(){returnX;}floatGetY(){returnY;}private:floatX,Y;};classRectangle:p
8、rivatePoint//派生类声明{public://新增外部接口例8.2私有继承1例8.2私有继承1voidInitR(floatx,floaty,floatw,floath){InitP(x,y);W=w;H=h;}//派生类访问基类公有成员voidMove(floatxOff,floatyOff){Point::Move(xOff,yOff);}fl
此文档下载收益归作者所有