欢迎来到天天文库
浏览记录
ID:58001382
大小:466.50 KB
页数:53页
时间:2020-09-04
《第7章--继承和派生.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章继承和派生本章教学要求:1.派生类的定义和访问权限。2.继承基类的数据成员与成员函数。3.基类指针与派生类指针的使用。4.虚基类。1§7.1继承与派生§7.1.1基本概念:1.什么是继承?派生类从基类继承了各种成员的关系就称为继承。2.继承的分类:单继承多继承3.基类与派生类的关系:基类是对派生类的抽象,派生类是对基类的具体化。2§7.1.2派生类的定义与构成:1.定义派生类的一般格式:class<派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…….<继承方式n><基类名n>{<派生类新定义成
2、员>};32.继承方式包括三种:①公有继承-----public②私有继承-----private(缺省的继承方式)③保护继承-----protected§7.2派生类对基类成员的访问⑴从基类继承下来的全部成员构成派生类的基类部分。⑵基类中的私有成员在派生类中不可访问。4⑶派生类的基类部分的非私有成员的访问属性由原有属性和继承属性共同决定。按级别高的限定。①公有继承:-----属性保持不变基类中的公有成员-----公有的基类中的保护成员-----保护的②保护继承:基类中的公有成员、保护成员----皆为保护的③私有继承:基
3、类中的公有成员、保护成员----皆为私有的5⑷例7.1classPoint{public:voidInitPoint(intx,inty);voidMove(intxOff,intyOff);intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};6voidPoint::InitPoint(intx,inty){X=x;Y=y;}voidPoint::Move(intxOff,intyOff){X+=xOff;Y+=yOff;}7classRectangle:publ
4、icPoint{public:voidInitRectangle(intx,inty,intw,inth);intGetW(){returnW;}intGetH(){returnH;}private:intW,H;};8voidRectangle::InitRectangle(intx,inty,intw,inth){InitPoint(x,y);W=w;H=h;}intmain(){Rectanglerect;rect.InitRectangle(2,3,10,20);rect.Move(3,2);cout<5、.GetX()<<","<6、rrorC2248:‘data':cannotaccessprotectedmemberdeclaredinclass'Base‘§7.3派生类的构造函数和析构函数§7.3.1派生类的构造函数<派生类名>::<派生类名>(形参表列):<基类名1>(实参表列1),…….<基类名n>(实参表列n),<成员对象名1>(实参表n+1),…….{<派生类构造函数体>}11说明几点:⑴每个派生类必须而且只需负责它的直接基类的构造。⑵对基类成员和新增成员对象的初始化必须在成员初始化表中进行。⑶当派生类有多个基类时,处于同一层次的各个基7、类的构造函数的调用次序取决于定义派生类时声明的顺序(自左向右)。⑷当派生类中有多个成员对象时,各个成员对象构造函数的调用顺序也取决于在派生类中定义的顺序(自上而下)⑸建立派生类对象时,执行构造函数的顺序:先父类(基类)、再孩子(成员对象),最后自己(派生类构造函数体)12例:7.3分析下列程序的结果:classBase1{public:Base1(inti){b1=i;cout<<"ConstructorofBase1."<8、ntb1;};13classBase2{public:Base2(inti){b2=i;cout<<"ConstructorofBase2."<
5、.GetX()<<","<6、rrorC2248:‘data':cannotaccessprotectedmemberdeclaredinclass'Base‘§7.3派生类的构造函数和析构函数§7.3.1派生类的构造函数<派生类名>::<派生类名>(形参表列):<基类名1>(实参表列1),…….<基类名n>(实参表列n),<成员对象名1>(实参表n+1),…….{<派生类构造函数体>}11说明几点:⑴每个派生类必须而且只需负责它的直接基类的构造。⑵对基类成员和新增成员对象的初始化必须在成员初始化表中进行。⑶当派生类有多个基类时,处于同一层次的各个基7、类的构造函数的调用次序取决于定义派生类时声明的顺序(自左向右)。⑷当派生类中有多个成员对象时,各个成员对象构造函数的调用顺序也取决于在派生类中定义的顺序(自上而下)⑸建立派生类对象时,执行构造函数的顺序:先父类(基类)、再孩子(成员对象),最后自己(派生类构造函数体)12例:7.3分析下列程序的结果:classBase1{public:Base1(inti){b1=i;cout<<"ConstructorofBase1."<8、ntb1;};13classBase2{public:Base2(inti){b2=i;cout<<"ConstructorofBase2."<
6、rrorC2248:‘data':cannotaccessprotectedmemberdeclaredinclass'Base‘§7.3派生类的构造函数和析构函数§7.3.1派生类的构造函数<派生类名>::<派生类名>(形参表列):<基类名1>(实参表列1),…….<基类名n>(实参表列n),<成员对象名1>(实参表n+1),…….{<派生类构造函数体>}11说明几点:⑴每个派生类必须而且只需负责它的直接基类的构造。⑵对基类成员和新增成员对象的初始化必须在成员初始化表中进行。⑶当派生类有多个基类时,处于同一层次的各个基
7、类的构造函数的调用次序取决于定义派生类时声明的顺序(自左向右)。⑷当派生类中有多个成员对象时,各个成员对象构造函数的调用顺序也取决于在派生类中定义的顺序(自上而下)⑸建立派生类对象时,执行构造函数的顺序:先父类(基类)、再孩子(成员对象),最后自己(派生类构造函数体)12例:7.3分析下列程序的结果:classBase1{public:Base1(inti){b1=i;cout<<"ConstructorofBase1."<8、ntb1;};13classBase2{public:Base2(inti){b2=i;cout<<"ConstructorofBase2."<
8、ntb1;};13classBase2{public:Base2(inti){b2=i;cout<<"ConstructorofBase2."<
此文档下载收益归作者所有