第七章 继承与派生
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章继承与派生C++语言程序设计
石家庄铁道学院计算机与信息工程
分院刘立嘉
本章主要内容
z类的继承与派生
z类成员的访问控制
z单继承与多继承
z派生类的构造、析构函数z类成员的标识与访问
类的继承与派生
z保持已有类的特性而构造新类的过程称为继承。
z在已有类的基础上新增自己的特性而产生新类的过程称为派生。
z被继承的已有类称为基类(或父类)。z派生出的新类称为派生类。
继承与派生问题举例类
继承与派生问题举例类
继承与派生问题举例类
继承与派生问题举例类
继承与派生的目的z 继承的目的:实现代码重用。z 派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。
类
的
继
承
与
派
生
派生类的声明class 派生类名:继承方式基类名{成员声明;}
类
的
继
承
与
派
生
继承方式z 不同继承方式的影响主要体现在:–派生类成员对基类成员的访问权限–通过派生类对象对基类成员的访问权限z 三种继承方式–公有继承–私有继承
–保护继承
类
成
员
的
访
问
控
制
公有继承(public)
z 基类的public 和protected 成员的访问属性在派生类中保持不变,但基类的private 成员不可直接访问。z 派生类中的成员函数可以直接访问基类中的public 和protected 成员,但不能直接访问基类的private 成员。z 通过派生类的对象只能访问基类的
public 成员。
类
成
员
的
访
问
控
制
例7-1 公有继承举例
class Point //基类Point 类的声明{public://公有函数成员void InitP(float xx=0, float yy=0){X=xx;Y=yy;}void Move(float xOff, float yOff){X+=xOff;Y+=yOff;}float GetX() {return X;}float GetY() {return Y;}
private://私有数据成员
float X,Y;
};
类
成
员
的
访
问
控
制
class Rectangle: public Point //派生类声明
{
public://新增公有函数成员
void InitR(float x, float y, float w, float h) {InitP(x,y);W=w;H=h;}//调用基类公有成员函数float GetH() {return H;}
float GetW() {return W;}
private://新增私有数据成员
float W,H;
};
#include
#include
using namecpace std;
int main()
{ Rectangle rect;
rect.InitR(2,3,20,10);
//通过派生类对象访问基类公有成员rect.Move(3,2);
cout< < < < return 0; } 私有继承(private) z 基类的public 和protected 成员都以private 身份出现在派生类中,但基类的private 成员不可直接访问。z 派生类中的成员函数可以直接访问基类中的public 和protected 成员,但不能直接访问基类的private 成员。z 通过派生类的对象不能直接访问基类 中的任何成员。 类 成 员 的 访 问 控 制 例7-2 私有继承举例 class Rectangle: private Point //派生类声明{public://新增外部接口void InitR(float x, float y, float w, float h){InitP(x,y);W=w;H=h;}//访问基类公有成员void Move(float xOff, float yOff) {Point::Move (xOff,yOff);}float GetX() {return Point::GetX();}float GetY() {return Point::GetY();}float GetH() {return H;} float GetW() {return W;} private://新增私有数据 float W,H; }; 类 成 员 的 访 问 控 制 #include #include using namecpace std; int main() { //通过派生类对象只能访问本类成员 Rectangle rect; rect.InitR(2,3,20,10); rect.Move(3,2); cout< }