NO8类的继承与派生电子课件C++程序设计案例教程.ppt
《NO8类的继承与派生电子课件C++程序设计案例教程.ppt》由会员分享,可在线阅读,更多相关《NO8类的继承与派生电子课件C++程序设计案例教程.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目录类的继承与派生 面向对象程序设计的主要特征之一是继承。在程序开发中,一些类的数据成员和成员函数的内容基本或者相当一部分相同,在建立新类时,就可以继承原有类的相同或者相似部分,再加入自己的新内容,实现代码重用,减少重复的工作量,提高软件开发效率。派生类继承的基类数据成员的初始化工作是在派生类中实现的。派生类对象建立时,系统调用派生类构造函数,在执行派生类构造函数前,先调用基类构造函数以及子对象构造函数,再执行派生类构造函数。系统调用析构函数的顺序与调用构造函数的顺序正相反。由于C+语言允许派生类的多重继承,造成派生类继承的相同基类数据成员的副本可能有若干份,C+系统提供了虚基类的方法来解决这
2、个问题。目录8.1 创建派生类 软件开发中,不同的类中的数据成员和成员函数的内容可能不同,也可能相似。如果新建一个类,其部分数据成员或者成员函数内容已经在已有的其他类中存在,就可以采用继承的方式使得已经存在的成员成为自己的一部分,再加上新的内容即可。继承过程中,原有的类称为“基类(base class)”或者“父类(father class)”,新建的类称为“派生类(derived class)”或者“子类(son class)”。目录8.1.1 派生类的定义 Add your text in here在简单图形系统中定义类图形 定义一个基类Graph和派生类Rectangle,其中,主函数内
3、Rectangle对象调用Graph成员函数和Rectangle成员函数。目录8.1.1 派生类的定义源代码展示#include using namespace std;/定义基类class Graphprotected:int g1,g2;public:void getValue()coutPlease input numbers to g1 and g2:g1g2;void display()coutg1=g1,g2=g2endl;目录8.1.1 派生类的定义运行结果目录8.1.1 派生类的定义程序分析目录知识讲解派生类声明的方式 派生类的构成 假定已经存在一个基类,在此基础上通过继承建立
4、一个派生类,声明的方式如下:class 派生类名:继承方式 基类名 派生类新增的成员;继承的方式包括public(公有的)、private(私有的)和protected(受保护的)。继承方式是可选的,如果不写此项,则系统默认为private。在为派生类选择基类时,应尽量使冗余量最小。派生类虽然从基类接受了所有的成员,但并非可以访问所有成员,因为不同的继承方式使基类的成员到派生类后访问属性发生了变化。如果派生类新增的成员函数与继承的成员函数不仅同名,而且函数的参数表也完全相同,即非函数重载,则派生类新增的成员函数将覆盖继承的成员函数。目录8.1.2 派生类成员的访问属性 Add your tex
5、t in here通过为基类成员定义不同的访问属性,了解访问基类成员的方式 在基类中定义3种不同访问属性的成员,在派生类成员函数内或通过派生类对象调用这些基类成员,观察其区别。目录8.1.2 派生类成员的访问属性源代码展示#include using namespace std;class Graphprivate:int g1,g2;protected:int g3,g4;public:int g5,g6;void getValue()coutInput private data g1 and g2g1g2;coutInput protected data g3 and g4g3g4;cou
6、tInput public data g5 and g6g5g6;coutendl;void display()coutprivate data:g1=g1,g2=g2endl;class Triangle:public Graphprivate:int base,height;public:void getTriValue()coutif(base=g3,height=g4)endl;base=g3;height=g4;目录8.1.2 派生类成员的访问属性运行结果目录8.1.2 派生类成员的访问属性程序分析目录8.1.2 派生类成员的访问属性程序分析目录8.1.2 派生类成员的访问属性程序分
7、析目录知识讲解公有继承 公有继承方式 方式派生类以公有方式继承获得的基类成员,保持了原有的访问属性。其中,获得的私有成员在派生类中不可访问,但可以通过调用基类的公有或者保护属性的函数访问;获得的保护成员可以在派生类中使用,但不能在类外通过对象名调用;获得的公有成员既可以在派生类中使用,也可以在类外调用。保护继承 保护继承方式 方式派生类以保护方式继承获得的基类成员中,私有成员同样不能在派生类中使用,而其他成员在派生类中的访问属性都是protected,也就是说,它们只能在派生类中使用,不能在类外用对象名调用。私有继承 私有继承方式 方式派生类以私有方式继承的基类成员,除了私有成员不能访问外,其
8、他成员的访问属性都是private,即它们只能在派生类中使用,不能在类外被调用。这一特点与保护派生类是一样的,但是保护派生类中的成员可以被新的派生类继承使用。目录8.2 派生类的构造函数和析构函数 Add your text in here观察单继承时,基类和派生类的构造函数和析构函数被调用的情况 定义基类Graph和派生类Rectangle。观察派生类对象建立时,派生类构造函数和基类构造函数被系统调用的情况;观察程序结束时,派生类和基类析构函数被系统调用的情况。8.2.1 创建单继承的构造函数和析构函数目录8.2.1 创建单继承的构造函数和析构函数源代码展示#include using na
9、mespace std;class Graphprivate:int g1,g2;public:Graph(int i1,int i2):g1(i1),g2(i2)cout 调用基类的构造函数endl;Graph()cout 调用基类的析构函数endl;void display()coutprivate data:g1=g1,g2=g2endl;目录8.2.1 创建单继承的构造函数和析构函数运行结果目录8.2.1 创建单继承的构造函数和析构函数程序分析 程序中包含两个类:基类Graph和派生类Rectangle。基类中设计了带参数构造函数和析构函数。构造函数的形参i1和i2在该构造函数被调用时
10、,将为基类数据成员g1和g2赋初值。基类中还设计了析构函数Graph()。析构函数的作用是释放基类对象所占的空间,析构函数内通常没有实质性的内容。如果类中没有定义析构函数,系统将生成无函数体的默认析构函数。程序执行时,系统调用主函数。主函数中先建立了派生类对象,通常派生类建立时要调用构造函数,而派生类的构造函数是带参数。程序结束前,系统通常释放程序运行中所占据的存储空间,采用调用析构函数的方式。从运行结果可以看出,系统是先调用了派生类的析构函数,再调用基类的析构函数。目录知识讲解派生类构造函数的形式 派生类构造函数名(形式参数表):基类构造函数名(实参数表)派生类新增数据成员初始化语句基类和派
11、生类的构造函数和析构函数的执行顺序 建立派生类对象时,先调用基类构造函数,再调用派生类构造函数。如果基类构造函数重载,系统在调用时根据派生类构造函数声明冒号后面的基类构造函数实参表选择参数匹配的基类构造函数。与调用构造函数的顺序相反,系统调用析构函数的顺序是先调用派生类析构函数,再调用基类析构函数。目录8.2.2 创建多层派生类的构造函数和析构函数 Add your text in here观察多层继承后,系统调用派生类和基类构造函数、析构函数的情况 建立3个类,实现多层继承。观察最后一层派生类建立对象时,基类和派生类的构造函数被系统调用的情况;观察程序结束时,基类和派生类的析构函数被系统调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NO8类的继承与派生电子课件 C+程序设计案例教程 NO8 继承 派生 电子 课件 C+ 程序设计 案例 教程
限制150内