- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c笔记6-10
第六章 继承和派生
§6.1 继承和派生的概念
一、派生
类的派生是指从一个或多个以前定义的类产生新类的过程,原有的类称为基类,新产生的类称为派生类,派生类继承了基类所有的数据成员和成员函数。
派生类使用两种基本的面向对象技术,一种称为性质约束,即对基类的性质进行限制;另一种称为性质扩展,即增加派生类的性质。
相对基类,派生类可以有以下变化:增加新的成员;重新定义已有的成员函数;改变基类成员的访问权限。
二、继承
类的继承是指派生类继承基类的数据成员和成员函数为自己的成员,继承常用来表示类属关系,而不是构成关系。
C++中有两种继承方式:单一继承和多重继承,对于前者,派生类只能有一个基类;对于后者,派生类可以有多个基类。
静态成员可以被继承,这时基类对象和派生类对象共享该静态成员。
§6.2 单一继承
一、单一继承的一般声明形式
class 派生类名:访问控制 基类名{
private:
成员声明列表protected:
成员声明列表
public:
成员声明列表
};
其中,访问控制是指如何控制基类成员在派生类中的访问属性,它是关键字private、protected和public中的一个,声明中的其余部分和类的声明类似。
二、派生类的构造函数和析构函数
1、定义派生类构造函数的一般定义形式:
派生类名::派生类名(参数表0):基类名(参数表){…… //函数体}冒号后“基类名(参数表)”称为成员初始化列表,参数表给出所调用的基类构造函数所需要的实参,实参的值可来自“参数表0”,也可由表达式给出。
2、派生类析构函数的一般定义形式:
派生类名::~派生类名(){……//函数体}
构造函数和析构函数也都可在类体内直接定义为内联函数,这时的定义形式需把上述定义式中的“派生类名::”去掉。
例1:使用默认内联函数实现单一继承
#include iostream
using namespace std;
class Point{
private:
int x,y;
public:
Point(int a,int b){x=a;y=b;cout点” ”;}
void Showxy( ){coutx=x,y=y” ”;}
~Point( ){cout删除点” ”;}
};
class Rectangle:public Point{
private:
int H,W;
public:
Rectangle(int a,int b,int h,int w):Point(a,b){H=h;W=w;cout矩形” ”;}
//构造函数初始化列表
void Show( ){coutH=H,W=W” ”;}
~Rectangle( ){cout删除矩形” ”;}
};
void main(){
Rectangle r1(3,4,5,6);}
程序运行结果:
点 矩形 x=3,y=4 H=5,W=6 删除矩形 删除点
3、小结
由上例可看出,构造函数和析构函数是不被继承的,所以一个派生类只能调用它的直接基类的构造函数,当定义派生类的一个对象时,首先调用基类的构造函数,对基类成员进行初始化,然后执行派生类的构造函数,如果某个基类仍是一个派生类,则这个过程递归进行。当该对象消失时,析构函数的执行顺序和执行构造函数时的顺序正好相反。
三、类的保护成员
类的保护成员是指在类声明中以关键字protceted声明的成员,保护成员具有私有成员和公有成员的双重角色:对派生类的成员函数而言,它是公有成员,可直接访问;而对其他函数而言,它是私有成员,不能直接访问,只能通过基类的对象访问。这样就解决了使用公有方式产生的派生类的成员函数虽然可直接访问基类中定义的或从另一个基类继承来的公有成员,但不能访问基类的私有成员的问题。
例2:演示使用protected成员的实例
#include iostream
using namespace std;
class Point{
protected:
int x,y;
public:
Point(int a,int b){x=a;y=b;} //Point类构造函数为内联函数
void Show( ){coutx=x,y=yendl;};
};
class Rectangle:public Point{
private:
int H,W;
public:
Rectangle(int,int,int,int); //声明Rectangle类的构造函数
void Show( ){cou
您可能关注的文档
最近下载
- 2024年社会工作者《中级法规与政策》数字型考点.pdf VIP
- 竺乾威、朱春奎、李瑞昌:《公共管理导论》 第三章 组织.pptx VIP
- 建筑工程图集 B16G101-1:中英文双语版16G101-1.pdf VIP
- 图集规范-05N6井盖标准图集.pdf
- 室外消防钢结构楼梯拆除方案.pdf
- (精选施工方案)0141 民航总局办公楼加固整修工程.doc VIP
- 统编版小学语文四年级上册第三单元 观察 大单元整体学历案教案 教学设计附作业设计(基于新课标教学评一致性).docx
- 有关青岛市新建住宅质量保修手册.doc
- 同课异构省一等奖《同底数幂的乘法》教案 (省一等奖) .doc
- 连云港市新海高级中学2023-2024学年高一上学期10月月考数学试题(解析版).docx VIP
文档评论(0)