C面向对象程序设计第二版教学课件ppt作者陈维兴林小茶编著C铁道第2版-5.ppt
- 文档编号:333884
- 上传时间:2022-10-09
- 格式:PPT
- 页数:115
- 大小:904.50KB
C面向对象程序设计第二版教学课件ppt作者陈维兴林小茶编著C铁道第2版-5.ppt
《C面向对象程序设计第二版教学课件ppt作者陈维兴林小茶编著C铁道第2版-5.ppt》由会员分享,可在线阅读,更多相关《C面向对象程序设计第二版教学课件ppt作者陈维兴林小茶编著C铁道第2版-5.ppt(115页珍藏版)》请在冰豆网上搜索。
,第5章继承与派生5.1继承与派生的概念5.2派生类的构造函数和析构函数5.3调整基类成员在派生类中的访问属性的其他方法5.4多继承与虚基类5.5赋值兼容规则,本章主要内容,5.1继承与派生的概念5.1.1为什么要使用继承5.1.2派生类的声明5.1.3基类成员在派生类中的访问属性5.1.4派生类对基类成员的访问规则,本节主要内容,5.1.1为什么要使用继承图5.1简单的汽车分类图,汽车,运输汽车,专用汽车,客车,货车,消防车,洒水车,所谓继承就是从先辈处得到属性和行为特征。
假设有两个类-类A和类B,若类B继承类AA(基类或父类)B(派生类或子类)则类B具有类A的基本特性(包括数据和程序代码),类的继承就是新的类从已有类那里得到已有的特性。
继承机制的作用:
类的继承机制使程序员无需修改已有类,只需在已有类的基础上,通过增加少量代码或修改少量代码的方法得到新的类,从而较好地解决了代码重用的问题。
由已有类产生新类时,新类便包含了已有类的特征,同时也可以加入自己的新特性。
如果类B是类A的派生类,那么,在构造类B的时候:
1.不必重新描述派生类B的所有特性,只需让它继承类A的特性;2.增加类B与基类A不同的那些特性。
继承来的特性派生类的特性新增加的特性,5.1.2派生类的声明classStudent/声明学生Studentpublic:
voidprint()coutnumber:
numberendl;coutname:
nameendl;coutscore:
scoreendl;protected:
intnumber;/学号stringname;/姓名floatscore;/成绩;,classUStudent/声明大学生类UStudentpublic:
voidprint1()coutnumber:
numberendl;coutname:
nameendl;coutscore:
scoreendl;coutmajor:
majorendl;private:
intnumber;/学号stringname;/姓名floatscore;/成绩stringmajor;/专业;,这3行在类Student中已存在,这3行在类Student中已存在,classStudentpublic:
voidprint();protected:
intnumber;stringname;floatscore;,classUStudent:
publicStudentpublic:
voidprint1()print();coutmajor:
majorendl;private:
stringmajor;/专业;,基类名,派生类名类,基类名,继承方式,被继承的部分,新增加的部分,声明一个派生类的一般格式为:
class派生类名继承方式基类名派生类新增的数据成员和成员函数;,classemployeepublicperson/;classemployeeprivateperson/;classemployeeprotectedperson/;默认的继承方式为:
private,公有继承,私有继承,保护继承,classbasepublic:
inty;voidshow()couty;classderived:
publicbasepublic:
voidprint()couty;.;.baseobj;coutobj.y;,基类中的公有成员,基类的成员函数可以访问,派生类的成员函数可以访问,(在类外)基类的对象可以访问,基类成员的访问规则,classbaseprivate:
inty;voidshow()couty;classderived:
publicbasepublic:
voidprint()couty;.;.baseobj;coutobj.y;,基类中的私有成员,基类的成员函数可以访问,派生类的成员函数不能直接访问,(在类外)基类的对象不能直接访问,classbaseprotected:
inty;voidshow()couty;classderived:
publicbasepublic:
voidprint()couty;.;.baseobj;coutobj.y;,基类中的保护成员,基类的成员函数可以访问,派生类的成员函数可以访问,(在类外)基类的对象不能直接访问,从已有类派生出新类时,可以在派生类内完成以下几种功能:
(1)可以增加新的数据成员。
(2)可以增加新的成员函数。
(3)可以对基类的成员进行重定义。
(4)可以改变基类成员在派生类中的访问属性。
这些内容将下面章节中详细介绍。
5.1.3基类成员在派生类中的访问属性classAprivate:
intx;public:
inty;protected:
intz;classB:
private(或public,protected)A.;,问题:
基类成员x、y、z的访问属性在派生类中有什么变化?
基类成员x、y、z在派生类中访问属性的变化是与继承的方式有关的。
1.私有继承时classAprivate:
intX;public:
intY;protected:
intZ;classB:
privateAX不允许派生类继承,不可直接访问。
Y在派生类中以私有成员的身份出现Z在派生类中以私有成员的身份出现。
私有继承,2.公有继承时classAprivate:
intX;public:
intY;protected:
intZ;classB:
publicAX不允许派生类继承,不可直接访问。
Y在派生类中仍以公有成员的身份出现Z在派生类中仍以保护成员的身份出现,公有继承,3.保护继承时classAprivate:
intX;public:
intY;protected:
intZ;classB:
protectedAX不允许派生类继承,不可直接访问。
Y在派生类中以保护成员的身份出现Z在派生类中仍以保护成员的身份出现,保护继承,5.1.4派生类对基类成员的访问规则派生类对基类成员的访问形式主要有以下两种:
classApublic:
intx;classB:
派生方式Aprint()coutx;intmain()Bb1;coutb1.x;return0;,内部访问由派生类中新增的成员函数对基类继承来的成员的访问,对象访问在派生类外部,通过派生类的对象对从基类继承来的成员的访问,classAintx;public:
inty;protected:
intz;classB:
privateAprint()/访问x?
y?
z?
(内部访问);main()Bb1;/b1访问x?
y?
z?
(对象访问).,私有继承,1.私有继承的访问规则,例5.1一个私有继承的例子。
#includeusingnamespacestd;classB/声明基类Bpublic:
voidgetx(intn)x=n;voiddispx()coutxendl;private:
intx;classD:
privateB/声明一个私有派生类public:
voidgetxy(intn,intm)getx(n);y=m;voiddispxy()coutxendl;coutyendl;private:
inty;,私有继承,getx()在派生类中为私有成员,派生类成员函数getxy()可以访问它,非法,基类中的私有成员x,不允许派生类成员函数dispxy()直接访问它,例5.1一个私有继承的例子。
#includeusingnamespacestd;classB/声明基类Bpublic:
voidgetx(intn)x=n;voiddispx()coutxendl;private:
intx;classD:
privateB/声明一个私有派生类public:
voidgetxy(intn,intm)getx(n);y=m;voiddispxy()coutxendl;coutyendl;private:
inty;,私有继承,intmain()Dobj;obj.getx(11);obj.dispx();obj.getxy(22,33);obj.dispxy();return0;,非法,getx()在派生类中为私有成员,派生类对象obj不能访问,非法,dispx()在派生类中为私有成员,派生类对象obj不能访问,例5.1一个私有继承的例子。
#includeusingnamespacestd;classB/声明基类Bpublic:
voidgetx(intn)x=n;voiddispx()coutxendl;private:
intx;classD:
privateB/声明一个私有派生类public:
voidgetxy(intn,intm)getx(n);y=m;voiddispxy()coutxendl;coutyendl;private:
inty;,主程序中删去两条错误语句:
intmain()Dobj;/obj.getx(11);/obj.dispx();obj.getxy(22,33);obj.dispxy();return0;,如果将函数dispxy()改成如下形式:
voiddispxy()dispx();coutyendl;,修改后,运行结果如下:
2233,修改方法,classAintx;public:
inty;protected:
intz;classB:
publicAprint()/访问x?
y?
z?
(内部访问);main()Bb1;/b1访问x?
y?
z?
(对象访问).,公有继承,2.公有继承的访问规则,#include/例5.3一个公有继承的例子。
classB/声明一个基类Binta;protected:
intb;public:
voidgetab(inta1,intb1)a=a1;b=b1;voiddispab()couta=aendl;coutb=bendl;classD:
publicB/声明一个公有派生类Dintc;public:
voidgetabc(inta1,intb1,intc1)getab(a1,b1);c=c1;voiddispabc()couta=aendl;coutb=bendl;coutc=cendl;,公有继承,getab()在派生类中是公有成员,派生类成员函数getabc()可以访问它,非法,a在派生类中为不可直接访问成员,合法,b在派生类中为保护成员,派生类成员函数dispabc()可以访问它,#include/例5.3一个公有继承的例子。
classB/声明一个基类Binta;protected:
intb;public:
voidgetab(inta1,intb1)a=a1;b=b1;voiddispab()couta=aendl;coutb=bendl;classD:
publicB/声明一个公有派生类Dintc;public:
voidgetabc(inta1,intb1,intc1)getab(a1,b1);c=c1;voiddispabc()couta=aendl;coutb=bendl;coutc=cendl;,公有继承,intmain()Dobj;obj.getabc(11,22,33);obj.dispab();obj.dispabc();return0;,合法,dispab()在派生类中为公有成员,派生类对象obj可以访问,#include/例5.3一个公有继承的例子。
classB/声明一个基类Binta;protected:
intb;public:
voidgetab(i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 第二 教学 课件 ppt 作者 陈维兴林小茶 编著 铁道