欢迎来到天天文库
浏览记录
ID:40053957
大小:528.97 KB
页数:71页
时间:2019-07-18
《《所有分类c》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1第七章继承与派生类的继承与派生类成员的访问控制类型兼容规则单继承与多继承派生类的构造、析构函数类成员的标识与访问深度探索[下半场]2类的继承与派生保持已有类的特性而构造新类的过程称为继承。在已有类的基础上新增自己的特性而产生新类的过程称为派生。被继承的已有类称为基类(或父类)。派生出的新类称为派生类。3继承与派生问题举例类的继承与派生4继承与派生问题举例类的继承与派生猫科5继承与派生问题举例类的继承与派生6继承与派生问题举例类的继承与派生7继承与派生的目的继承的目的:实现代码重用。派生的目的:当新的问题出现,原有
2、程序无法解决(或不能完全解决)时,需要对原有程序进行改造。类的继承与派生8派生类的声明class派生类名:继承方式基类名{成员声明;}类的继承与派生9继承方式不同继承方式的影响主要体现在:派生类成员对基类成员的访问权限通过派生类对象对基类成员的访问权限三种继承方式公有继承私有继承保护继承类成员的访问控制10公有继承(public)基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。派生类中的成员函数可以直接访问基类中的public和protected成员,
3、但不能直接访问基类的private成员。通过派生类的对象只能访问基类的public成员。类成员的访问控制11例7-1公有继承举例//Rectangle.hclassPoint//基类Point类的声明{public://公有函数成员voidInitPoint(floatx=0,floaty=0){this->x=x;this->y=y;}voidMove(floatxOff,floatyOff){x+=xOff;y+=yOff;}floatGetX(){returnx;}floatGetY(){returnx;}p
4、rivate://私有数据成员floatx,y;};//endclassPoint类成员的访问控制classRectangle:publicPoint//派生类声明部分{public://新增公有函数成员voidInitRectangle(floatx,floaty,floatw,floath){InitPoint(x,y);//调用基类公有成员函数this->w=w;this->h=h;}//InitRectanglefloatGetH(){returnh;}floatGetW(){returnw;}privat
5、e://新增私有数据成员floatw,h;};//endclassRectangle//endofRectangle.h12//7_1.cpp#include#include#include"rectangle.h"usingnamespacestd;voidmain(void){Rectanglerect;//声明Rectangle类的对象rect.InitRectangle(2,3,20,10);//设置矩形的数据rect.Move(3,2);//移动矩形位置cout<<"Th
6、edataofrect(x,y,w,h):"<7、通过派生类的对象不能直接访问基类中的任何成员。类成员的访问控制15例7-2私有继承举例//rectangle.h……//基类Point类的声明classRectangle:privatePoint//派生类声明部分{public://新增公有函数成员voidInitRectangle(floatx,floaty,floatw,floath){InitPoint(x,y);//调用基类公有成员函数this->w=w;this->h=h;}//InitRectanglevoidMove(floatxOff,floaty8、Off){Point::Move(xOff,yOff);}floatGetX(){returnPoint::GetX();}floatGetY(){returnPoint::GetY();}floatGetH(){returnh;}floatGetW(){returnw;}private://新增私有数据成员floatw,h;};//endclassRect
7、通过派生类的对象不能直接访问基类中的任何成员。类成员的访问控制15例7-2私有继承举例//rectangle.h……//基类Point类的声明classRectangle:privatePoint//派生类声明部分{public://新增公有函数成员voidInitRectangle(floatx,floaty,floatw,floath){InitPoint(x,y);//调用基类公有成员函数this->w=w;this->h=h;}//InitRectanglevoidMove(floatxOff,floaty
8、Off){Point::Move(xOff,yOff);}floatGetX(){returnPoint::GetX();}floatGetY(){returnPoint::GetY();}floatGetH(){returnh;}floatGetW(){returnw;}private://新增私有数据成员floatw,h;};//endclassRect
此文档下载收益归作者所有