第七章 继承与派生

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<

}

相关文档
最新文档