c++学习-第5章 继承与派生_第1页
c++学习-第5章 继承与派生_第2页
c++学习-第5章 继承与派生_第3页
c++学习-第5章 继承与派生_第4页
c++学习-第5章 继承与派生_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 5 章 继承与派生,C+程序设计,2,本章主要内容,5.1 继承与派生的概念5.2 派生类的声明方式5.3 派生类的构成5.4 派生类成员函数的访问属性5.5 派生类的构造函数和析构函数,3,5.1 继承与派生的概念,继承性是面向对象程序设计中最重要的机制。这种机制提供了无限重复利用程序资源的一种途径。通过C+语言中的继承机制,可以扩充和完善旧的程序设计以适应新的需求。,4,class Student int num; char name30; char sex; public: void display( ) /对成员函数display的定义 coutnum: numendl; coutname: nameendl; coutsex: sexendl; ;,5,class Studend1 int num; char name20; char sex; int age;/新添加 char addr20; /新添加public: void display( ) coutnum: numendl; coutname: nameendl; coutsex: sexendl; coutage: ageendl; /新添加 coutaddress: addrendl; /新添加;,6,利用原来定义的类Student作为基础,再加上新的内容即可,以减少重复的工作量。 C+提供的继承机制就是为了解决这个问题。,“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类(base class)”或“父类(father class)”。新建立的类称为“派生类(derived class)”或“子类(son class)”。,7,class Student1: public Student /声明基类是Studentprivate: int age; /新增加的数据成员 string addr; /新增加的数据成员public: void display_1( ) /新增加的成员函数 coutage: ageendl; coutaddress: addrnumnamesex; void display( )coutnum: numendl;coutname: nameendl;coutsex: sexageaddr; void display_1() coutnum: numendl; /错! coutname: nameendl; /错! coutsex: sexendl; /错! coutage: ageendl; coutaddress: addrnumnamesex; void display( )coutnum: numendl;coutname: nameendl;coutsex: sexendl;private : int num; string name; char sex;,class Student1: private Student public: void display_1() display(); cout“num: ”numendl;/错! coutage: ageendl; coutaddress: addrendl; private: int age; string addr; ;,int main() Student1 stud1; stud1.set_value(); /错! stud1.display(); /错! stud1.display_1(); return 0;,例C5-2,24,私有继承(private),派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。通过派生类的对象不能直接访问基类中的任何成员。私有继承后,中止了基类功能的继续派生,比较少用。,25,三、保护继承(protected),基类A的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可直接访问。派生类B中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。通过派生类的对象不能直接访问基类中的任何成员若再公有派生,原基类中的public和protected成员可以被新派生类C的成员函数访问。,26,基类成员在派生类中的访问属性,27,类A为基类,类B是类A的派生类,类C是类B的派生类,则类C也是类A的派生类;类B称为类A的直接派生类,类C称为类A的间接派生类;类A是类B的直接基类,是类C的间接基类。例5.4 多层派生的访问属性。,四、多级派生时的访问属性,28,例5.4 各成员在不同类中的访问属性,29,5.5 继承时的构造函数,声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化,自动调用基类构造函数完成。派生类的构造函数可能需要给基类的构造函数传递参数,30,派生类构造函数的构造条件,在两种情况下,必须定义派生类的构造函数:1)派生类本身需要构造函数;2)在定义派生类对象时,其相应的基类对象需调用带有参数的构造函数。,31,单一继承时的构造函数,派生类名:派生类名(基类所需的形参,本类成员所需的形参) : 基类名(参数表) 本类成员初始化赋值语句;,32,class Studentpublic: Student(int n,string nam,char s ) num=n; name=nam; sex=s; void display( )coutnum: numendl;coutname: nameendl;coutsex: sexendl;protected : int num; string name; char sex;,class Student1: public Student public: Student1(int n,string nam,char s,int a,string ad) : Student(n,nam,s) age=a; addr=ad; void display_1() display(); coutnum: numendl; coutage: ageendl; coutaddress: addrendl; private: int age; string addr; ;,int main() Student1 stud1(10010,Wang-li,f,19,115 Beijing Road,Shanghai); Student1 stud2(10011,Zhang-fun,m,21,213 Shanghai Road,Beijing); stud1.display_1(); stud2.display_1(); return 0;,33,派生类的析构函数,在派生类中是否要定义析构函数与它所属的基类无关;派生类析构函数的定义与无继承关系的类的析构函数定义相同,它只负责清理新增的非对象成员;系统会自动调用基类及对象成员的析构函数来对基类和对象成员进行清理,但执行次序和构造函数正好相反(先派生类,再基类对象,后基类)。,34,理解继承与派生的概念,掌握单继承和多继承的定义方式;掌握继承的几种方式:pub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论