C面向对象程序设计第二版教学课件ppt作者陈维兴林小茶编著C铁道第2版-5PPT文档格式.ppt
《C面向对象程序设计第二版教学课件ppt作者陈维兴林小茶编著C铁道第2版-5PPT文档格式.ppt》由会员分享,可在线阅读,更多相关《C面向对象程序设计第二版教学课件ppt作者陈维兴林小茶编著C铁道第2版-5PPT文档格式.ppt(115页珍藏版)》请在冰豆网上搜索。
coutscore:
scoreendl;
protected:
intnumber;
/学号stringname;
/姓名floatscore;
/成绩;
classUStudent/声明大学生类UStudentpublic:
voidprint1()coutnumber:
coutmajor:
majorendl;
private:
/成绩stringmajor;
/专业;
这3行在类Student中已存在,这3行在类Student中已存在,classStudentpublic:
voidprint();
stringname;
floatscore;
classUStudent:
publicStudentpublic:
voidprint1()print();
stringmajor;
基类名,派生类名类,基类名,继承方式,被继承的部分,新增加的部分,声明一个派生类的一般格式为:
class派生类名继承方式基类名派生类新增的数据成员和成员函数;
classemployeepublicperson/;
classemployeeprivateperson/;
classemployeeprotectedperson/;
默认的继承方式为:
private,公有继承,私有继承,保护继承,classbasepublic:
inty;
voidshow()couty;
classderived:
publicbasepublic:
voidprint()couty;
.;
.baseobj;
coutobj.y;
基类中的公有成员,基类的成员函数可以访问,派生类的成员函数可以访问,(在类外)基类的对象可以访问,基类成员的访问规则,classbaseprivate:
基类中的私有成员,基类的成员函数可以访问,派生类的成员函数不能直接访问,(在类外)基类的对象不能直接访问,classbaseprotected:
基类中的保护成员,基类的成员函数可以访问,派生类的成员函数可以访问,(在类外)基类的对象不能直接访问,从已有类派生出新类时,可以在派生类内完成以下几种功能:
(1)可以增加新的数据成员。
(2)可以增加新的成员函数。
(3)可以对基类的成员进行重定义。
(4)可以改变基类成员在派生类中的访问属性。
这些内容将下面章节中详细介绍。
5.1.3基类成员在派生类中的访问属性classAprivate:
intx;
public:
intz;
classB:
private(或public,protected)A.;
问题:
基类成员x、y、z的访问属性在派生类中有什么变化?
基类成员x、y、z在派生类中访问属性的变化是与继承的方式有关的。
1.私有继承时classAprivate:
intX;
intY;
intZ;
privateAX不允许派生类继承,不可直接访问。
Y在派生类中以私有成员的身份出现Z在派生类中以私有成员的身份出现。
私有继承,2.公有继承时classAprivate:
publicAX不允许派生类继承,不可直接访问。
Y在派生类中仍以公有成员的身份出现Z在派生类中仍以保护成员的身份出现,公有继承,3.保护继承时classAprivate:
protectedAX不允许派生类继承,不可直接访问。
Y在派生类中以保护成员的身份出现Z在派生类中仍以保护成员的身份出现,保护继承,5.1.4派生类对基类成员的访问规则派生类对基类成员的访问形式主要有以下两种:
classApublic:
派生方式Aprint()coutx;
intmain()Bb1;
coutb1.x;
return0;
内部访问由派生类中新增的成员函数对基类继承来的成员的访问,对象访问在派生类外部,通过派生类的对象对从基类继承来的成员的访问,classAintx;
privateAprint()/访问x?
y?
z?
(内部访问);
main()Bb1;
/b1访问x?
(对象访问).,私有继承,1.私有继承的访问规则,例5.1一个私有继承的例子。
#includeusingnamespacestd;
classB/声明基类Bpublic:
voidgetx(intn)x=n;
voiddispx()coutxendl;
classD:
privateB/声明一个私有派生类public:
voidgetxy(intn,intm)getx(n);
y=m;
voiddispxy()coutxendl;
coutyendl;
私有继承,getx()在派生类中为私有成员,派生类成员函数getxy()可以访问它,非法,基类中的私有成员x,不允许派生类成员函数dispxy()直接访问它,例5.1一个私有继承的例子。
私有继承,intmain()Dobj;
obj.getx(11);
obj.dispx();
obj.getxy(22,33);
obj.dispxy();
非法,getx()在派生类中为私有成员,派生类对象obj不能访问,非法,dispx()在派生类中为私有成员,派生类对象obj不能访问,例5.1一个私有继承的例子。
主程序中删去两条错误语句:
intmain()Dobj;
/obj.getx(11);
/obj.dispx();
如果将函数dispxy()改成如下形式:
voiddispxy()dispx();
修改后,运行结果如下:
2233,修改方法,classAintx;
publicAprint()/访问x?
(对象访问).,公有继承,2.公有继承的访问规则,#include/例5.3一个公有继承的例子。
classB/声明一个基类Binta;
intb;
voidgetab(inta1,intb1)a=a1;
b=b1;
voiddispab()couta=aendl;
coutb=bendl;
publicB/声明一个公有派生类Dintc;
voidgetabc(inta1,intb1,intc1)getab(a1,b1);
c=c1;
voiddispabc()couta=aendl;
coutc=cendl;
公有继承,getab()在派生类中是公有成员,派生类成员函数getabc()可以访问它,非法,a在派生类中为不可直接访问成员,合法,b在派生类中为保护成员,派生类成员函数dispabc()可以访问它,#include/例5.3一个公有继承的例子。
公有继承,intmain()Dobj;
obj.getabc(11,22,33);
obj.dispab();
obj.dispabc();
合法,dispab()在派生类中为公有成员,派生类对象obj可以访问,#include/例5.3一个公有继承的例子。
voidgetab(i