继承与派生优秀课件.ppt
《继承与派生优秀课件.ppt》由会员分享,可在线阅读,更多相关《继承与派生优秀课件.ppt(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、继承与派生第1页,本讲稿共76页本章主要内容o类的继承与派生o类成员的访问控制o单继承与多继承o派生类的构造、析构函数o类成员的标识与访问第2页,本讲稿共76页7.1继承概述o什么是继承o基类与派生类第3页,本讲稿共76页类的继承与派生o保持已有类的特性而构造新类的过程称为继承。o在已有类的基础上新增自己的特性而产生新类的过程称为派生。o被继承的已有类称为基类(或父类)。o派生出的新类称为派生类。第4页,本讲稿共76页动物哺乳动物爬行动物马狗工作型狗牧羊犬宠物狗看家犬猎犬小哈吧狗波斯狗第5页,本讲稿共76页1.什么是继承o简单地说,“继承”是指某类事物具有比其父辈事物更一般性的某些特征(或称为
2、属性),用对象和类的术语,我们可以这样表达:对象和类“继承”了另一个类的一组属性。第6页,本讲稿共76页2.基类与派生类o可以将上图中的各个方块看作是一个类,因此,例子中所涉及的这些类之间构成了一幅清晰的层次结构,既有类称为基类,以它为基础建立的新类称为派生类。第7页,本讲稿共76页7.2使用继承继承的一般形式如下:class派生类:访问权限基类访问权限是访问控制说明符,它可以是public、private或protected。第8页,本讲稿共76页继承与派生的目的o继承的目的:实现代码重用。o派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。第9页,本
3、讲稿共76页派生类的声明class派生类名:继承方式基类名成员声明;第10页,本讲稿共76页继承方式o不同继承方式的影响主要体现在:n派生类成员成员对基类成员的访问权限n通过派生类对象对象对基类成员的访问权限o三种继承方式n公有继承n私有继承n保护继承第11页,本讲稿共76页范例o继承应用的例子1创建派生类对象并进行初始化,在主程序中通过继承基类的成员属性,即可将三维对象的坐标值进行输出。o继承应用的例子2在主程序中创建派生类对象b,对象b调用基类的公有成员函数传递参数,然后对象b再调用自己的成员函数进行输出。第12页,本讲稿共76页范例o继承应用的例子1创建派生类对象并进行初始化,在主程序中
4、通过继承基类的成员属性,即可将三维对象的坐标值进行输出。o继承应用的例子2在主程序中创建派生类对象b,对象b调用基类的公有成员函数传递参数,然后对象b再调用自己的成员函数进行输出。第13页,本讲稿共76页公有继承(public)o基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。o派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。o通过派生类的对象只能访问基类的public成员。类成员的访问控制第14页,本讲稿共76页例7-1公有继承举例classPoint/基类Po
5、int类的声明public:/公有函数成员voidInitP(floatxx=0,floatyy=0)X=xx;Y=yy;voidMove(floatxOff,floatyOff)X+=xOff;Y+=yOff;floatGetX()returnX;floatGetY()returnY;private:/私有数据成员floatX,Y;类成员的访问控制第15页,本讲稿共76页classRectangle:publicPoint/派生类声明public:/新增公有函数成员voidInitR(floatx,floaty,floatw,floath)InitP(x,y);W=w;H=h;/调用基类公有
6、成员函数floatGetH()returnH;floatGetW()returnW;private:/新增私有数据成员floatW,H;16第16页,本讲稿共76页#include#includeusingnamecpacestd;intmain()Rectanglerect;rect.InitR(2,3,20,10);/通过派生类对象访问基类公有成员rect.Move(3,2);coutrect.GetX(),rect.GetY(),rect.GetH(),rect.GetW()endl;return0;17第17页,本讲稿共76页私有继承(private)o基类的public和protec
7、ted成员都以private身份出现在派生类中,但基类的private成员不可直接访问。o派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。o通过派生类的对象不能直接访问基类中的任何成员。类成员的访问控制第18页,本讲稿共76页例7-2私有继承举例classRectangle:privatePoint/派生类声明public:/新增外部接口voidInitR(floatx,floaty,floatw,floath)InitP(x,y);W=w;H=h;/访问基类公有成员voidMove(floatxOff,floatyOff)P
8、oint:Move(xOff,yOff);floatGetX()returnPoint:GetX();floatGetY()returnPoint:GetY();floatGetH()returnH;floatGetW()returnW;private:/新增私有数据floatW,H;类成员的访问控制第19页,本讲稿共76页#include#includeusingnamecpacestd;intmain()/通过派生类对象只能访问本类成员Rectanglerect;rect.InitR(2,3,20,10);rect.Move(3,2);coutrect.GetX(),rect.GetY()
9、,rect.GetH(),rect.GetW()endl;return0;20第20页,本讲稿共76页保护继承(protected)o基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可直接访问。o派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。o通过派生类的对象不能直接访问基类中的任何成员类成员的访问控制第21页,本讲稿共76页protected成员的特点与作用o对建立其所在类对象的模块来说,它与private成员的性质相同。o对于其派生类来说,它与public成
10、员的性质相同。o既实现了数据隐藏,又方便继承,实现代码重用。类成员的访问控制第22页,本讲稿共76页例7-3protected成员举例classAprotected:intx;intmain()Aa;a.x=5;/错误类成员的访问控制第23页,本讲稿共76页classAprotected:intx;classB:publicApublic:voidFunction();voidB:Function()x=5;/正确24第24页,本讲稿共76页类型兼容规则o一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在:n派生类的对象可以被赋值给基类对象。n派生类的对象可以初始化基类的
11、引用。n指向基类的指针也可以指向派生类。o通过基类对象名、指针只能使用从基类继承的成员类型兼容第25页,本讲稿共76页例7-4类型兼容规则举例#includeusingnamecpacestd;classB0/基类B0声明public:voiddisplay()coutB0:display()endl;/公有成员函数;类型兼容第26页,本讲稿共76页classB1:publicB0public:voiddisplay()coutB1:display()endl;classD1:publicB1public:voiddisplay()coutD1:display()display();/对象指针
12、-成员名27第27页,本讲稿共76页intmain()/主函数B0b0;/声明B0类对象B1b1;/声明B1类对象D1d1;/声明D1类对象B0*p;/声明B0类指针p=&b0;/B0类指针指向B0类对象fun(p);p=&b1;/B0类指针指向B1类对象fun(p);p=&d1;/B0类指针指向D1类对象fun(p);运行结果:B0:display()B0:display()B0:display()28第28页,本讲稿共76页基类与派生类的对应关系o单继承n派生类只从一个基类派生。o多继承n派生类从多个基类派生。o多重派生n由一个基类派生出多个不同的派生类。o多层派生n派生类又作为基类,继续
13、派生新的类。单继承与多继承第29页,本讲稿共76页多继承时派生类的声明class派生类名:继承方式1基类名1,继承方式2基类名2,.成员声明;注意:每一个“继承方式”,只用于限制对紧随其后之基类的继承。单继承与多继承第30页,本讲稿共76页多继承举例classApublic:voidsetA(int);voidshowA();private:inta;classBpublic:voidsetB(int);voidshowB();private:intb;classC:publicA,privateBpublic:voidsetC(int,int,int);voidshowC();private
14、:intc;单继承与多继承第31页,本讲稿共76页voidA:setA(intx)a=x;voidB:setB(intx)b=x;voidC:setC(intx,inty,intz)/派生类成员直接访问基类的/公有成员setA(x);setB(y);c=z;/其它函数实现略intmain()Cobj;obj.setA(5);obj.showA();obj.setC(6,7,9);obj.showC();/obj.setB(6);错误/obj.showB();错误return0;32第32页,本讲稿共76页继承时的构造函数o基类的构造函数不被继承,派生类中需要声明自己的构造函数。o声明构造函数时
15、,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化,自动调用基类构造函数完成。o派生类的构造函数需要给基类的构造函数传递参数派生类的构造、析构函数第33页,本讲稿共76页单一继承时的构造函数派生类名:派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表)本类成员初始化赋值语句;派生类的构造、析构函数第34页,本讲稿共76页单一继承时的构造函数举例#includeusingnamecpacestd;classBpublic:B();B(inti);B();voidPrint()const;private:intb;派生类的构造、析构函数第35页,本讲稿共76页B:B()b=
16、0;coutBsdefaultconstructorcalled.endl;B:B(inti)b=i;coutBsconstructorcalled.endl;B:B()coutBsdestructorcalled.endl;voidB:Print()constcoutbendl;36第36页,本讲稿共76页classC:publicBpublic:C();C(inti,intj);C();voidPrint()const;private:intc;37第37页,本讲稿共76页C:C()c=0;coutCsdefaultconstructorcalled.endl;C:C(inti,intj)
17、:B(i)c=j;coutCsconstructorcalled.endl;C:C()coutCsdestructorcalled.endl;voidC:Print()constB:Print();coutcendl;intmain()Cobj(5,6);obj.Print();38第38页,本讲稿共76页多继承时的构造函数派生类名:派生类名(基类1形参,基类2形参,.基类n形参,本类形参):基类名1(参数),基类名2(参数),.基类名n(参数)本类成员初始化赋值语句;派生类的构造、析构函数第39页,本讲稿共76页派生类与基类的构造函数o当基类中声明有默认形式的构造函数或未声明构造函数时,派生
18、类构造函数可以不向基类构造函数传递参数。o若基类中未声明构造函数,派生类中也可以不声明,全采用缺省形式构造函数。o当基类声明有带形参的构造函数时,派生类也应声明带形参的构造函数,并将参数传递给基类构造函数。派生类的构造、析构函数第40页,本讲稿共76页多继承且有内嵌对象时的构造函数派生类名:派生类名(基类1形参,基类2形参,.基类n形参,本类形参):基类名1(参数),基类名2(参数),.基类名n(参数),对象数据成员的初始化本类成员初始化赋值语句;派生类的构造、析构函数第41页,本讲稿共76页构造函数的调用次序1调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。2调用成员对象的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承 派生 优秀 课件
限制150内