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