第七章继承与派生
时间:2026-01-14
时间:2026-01-14
866
C++语言程序设计
第七章 继承与派生
866
C++语言程序设计
本章主要内容 类的继承与派生 类成员的访问控制 单继承与多继承 派生类的构造、析构函数 类成员的标识与访问
866
C++语言程序设计
类的继承与派生保持已有类的特性而构造新类的过程 称为继承。 在已有类的基础上新增自己的特性而 产生新类的过程称为派生。 被继承的已有类称为基类(或父类)。 派生出的新类称为派生类。
866
C++语言程序设计
继承与派生问题举例类 的 继 承 与 派 生工具车 交通工具
汽车
小汽车
卡车
旅行车
轿车
面包车4
866
C++语言程序设计
类 的 继 承 与 派 生
继承与派生问题举例动物
猴子
猫
鸟
狮子
虎
猎豹5
866
C++语言程序设计
继承与派生问题举例类 的 继 承 与 派 生
几何形状
圆
矩形6
866
C++语言程序设计
继承与派生问题举例类 的 继 承 与 派 生雇员
兼职技术人员
管理人员
销售人员
销售经理
866
C++语言程序设计
继承与派生的目的类 的 继 承 与 派 生
继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有 程序无法解决(或不能完全解决)时, 需要对原有程序进行改造。
866
C++语言程序设计
派生类的声明类 的 继 承 与 派 生class 派生类名:继承方式 基类名 { 成员声明; }
866
C++语言程序设计
继承方式类 成 员 的 访 问 控 制
不同继承方式的影响主要体现在:– 派生类成员对基类成员的访问权限 – 通过派生类对象对基类成员的访问权限
三种继承方式– 公有继承 – 私有继承 – 保护继承
866
C++语言程序设计
公有继承(public)类 成 员 的 访 问 控 制基类的public和protected成员的访问 属性在派生类中保持不变,但基类的 private成员不可直接访问。 派生类中的成员函数可以直接访问基类 中的public和protected成员,但不能 直接访问基类的private成员。 通过派生类的对象只能访问基类的 public成员。 11
866
C++语言程序设计
例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; };12
866
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;
866
#include<iostream> #include<cmath> using namecpace std; int main() { Rectangle rect; rect.InitR(2,3,20,10); //
通过派生类对象访问基类公有成员 rect.Move(3,2); cout<<rect.GetX()<<',' <<rect.GetY()<<',' <<rect.GetH()<<',' <<rect.GetW()<<endl; return 0; }
866
C++语言程序设计
私有继承(private)类 成 员 的 访 问 控 制基类的public和protected成员都以 private身份出现在派生类中,但基类 的private成员不可直接访问。 派生类中的成员函数可以直接访问基 类中的public和protected成员,但 不能直接访问基类的private成员。 通过派生类的对象不能直接访问基类 中的任何成员。 15
866
C++语言程序设计
例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; };16
…… 此处隐藏:201字,全部文档内容请下载后查看。喜欢就下载吧 ……上一篇:成都市环境监测中心站内设机构职责
下一篇:新产品上市推广策划案