
第11章继承和派生11.1有关继承的基本概念派生类11.211.3派生类的继承方式和访问属性派生类的构造函数和析构函数11.4
0 第11章 继承和派生 11.1 有关继承的基本概念 11.2 派生类 11.3 派生类的继承方式和访问属性 11.4 派生类的构造函数和析构函数

11.1有关继承的基本概念classStudent继承的作用:软件重复使用(private:classPersonchar Name[20], Sex; int Age;(private :int Number;char ClassName[10];char Name[20] , Sex; int Age;public:public:void Register(char*name,intage, charvoid Register(char*name,int agesex,intnumber,char*classnamechar sex)strcpy(Name, name)strcpy(Name, name);Age= age;Age= age;Sex = (sex =-'m'?'m': '"f');Sex= (sex =='m'?'m':'f');Number=number;strcpy(ClassName,classname):13;
1 11.1 有关继承的基本概念 一、继承的作用:软件重复使用 class Person {private: char Name[20] , Sex; int Age; public: void Register(char *name, int age, char sex) { strcpy(Name, name); Age = age; Sex = (sex == 'm'? 'm': 'f ' ); } }; class Student { private: char Name[20] , Sex; int Age; int Number; char ClassName[10]; public: void Register(char *name, int age, char sex, int number, char *classname) { strcpy(Name, name); Age = age; Sex = (sex == 'm'? 'm': 'f ' ); Number=number; strcpy(ClassName, classname); } };

11.1有关继承的基本概念概念1.从已有的类(基类)产生新类的过程称为派生,这个新类又称为派生类。2.类的继承(inheritance)是指新类从基类那里得到基类的特征也就是继承基类的数据和函数
2 11.1 有关继承的基本概念 二、概念 1. 从 已有的类(基类)产生新类的过程称为派生,这个新类又称为派 生类。 2. 类的继承(inheritance)是指新类从基类那里得到基类的特征, 也就是继承基类的数据和函数

基类与派生类示意图学生小学生中学生大学生研究生初中生专科生本科生博士生高中生硕士生3
基类与派生类示意图 学生 小学生 中学生 大学生 研究生 初 中 生 高 中 生 专 科 生 本 科 生 硕 士 生 博 士 生 3

三、继承的优势:派生的新类可以增加或调整数据成员和成员函数,添加了基类所没有的特性(功能)。注:当从基类中派生出新类时,可以对派生类做如下几种变化:①可以增加新的数据成员:②可以增加新的成员函数③可以重新定义已有的成员函数,公有、保护)。④可以改变现有成员的属性(私有
4 • 三、继承的优势: • 派生的新类可以增加或调整数据成员和成员函数,添加 了基类所没有的特性(功能)。 注:当从基类中派生出新类时,可以对派生类做如下几 种变化: ① 可以增加新的数据成员; ② 可以增加新的成员函数; ③ 可以重新定义已有的成员函数; ④ 可以改变现有成员的属性(私有、公有、保护)

11.2派生类派生类的声明格式class派生类名:继承方式基类名1,...,继承方式基类名nprivate:成员表1;I派生类增加或替代的私有成员public:成员表2;I派生类增加或替代的公有成员protected:成员表3I派生类增加或替代的保护成员1 :注:1.继承方式--private,protected,public2.若无关键字(继承方式),则默认为私有继承(private)
5 11.2 派生类 一、派生类的声明格式 class 派生类名:继承方式基类名1,. ,继承方式 基类名n { private: 成员表1; //派生类增加或替代的私有成员 public: 成员表2; //派生类增加或替代的公有成员 protected: 成员表3; //派生类增加或替代的保护成员 }; 注:1. 继承方式- private ,protected, public 2.若无关键字(继承方式),则默认为私有继承(private)

例子class Student:publicPerson[ private :intNumber;char ClassName[10];public:void Register(int number,char *classname, char *name, int age, charsex)Number=number;strcpy(ClassName,classname);voidShowStu(cout<<Number<<"lt'<<ClassName<<endlShowMe();)
例子 6 class Student : public Person { private: int Number; char ClassName[10]; public: void Register( int number, char *classname , char *name, int age, char sex ) { Number=number; strcpy(ClassName, classname); . } void ShowStu() { cout<<Number<<‘\t’<<ClassName<<endl; ShowMe(); } };

单继承与多继承单继承:一个派生类只有一个基类多继承:一个派生类同时有多个基类2classPlaneI飞机classRocketll火箭[charWing;l/机翼[charRocketEngine;l火箭发动机charUndercarriage;l/起落架public:public:voidLaunch():l发射方法voidLand()://着陆方法3;);classSpaceShuttle:publicPlane,publicRocketl/航天飞机(;
二、单继承与多继承 • 1、单继承:一个派生类只有一个基类 • 2、多继承:一个派生类同时有多个基类 7 class Plane //飞机 {char Wing; //机翼 char Undercarriage; //起落架 public: void Land(): //着陆方法 }; class Rocket //火箭 {char RocketEngine; //火箭发动机 public: void Launch(): //发射方法 }; class SpaceShuttle: public Plane, public Rocket //航天飞机 { };

三、派生类的构成1、从基类接收的成员注:除构造函数和析构函数外,必须接收所有的数据成员和成员函数派生类对基类的扩充:增加新的成员21派生类对基类成员的改造3(1).派生类通过继承方式,可以改变对基类成员的访问权限;2).可以对对基类成员函数进行重定义注:重定义时,函数名相同,参数表不论是否相同,称派生类覆盖了基类的同名成员函数(在派生类的范围内不起作用)。0
8 三、派生类的构成 1、从基类接收的成员 注:除构造函数和析构函数外,必须接收所有的数据成员和 成员函数 注:重定义时,函数名相同,参数表不论是否相同,称派 生类覆盖了基类的同名成员函数(在派生类的范围内不起 作用)。 2、派生类对基类的扩充:增加新的成员 3、派生类对基类成员的改造 (1). 派生类通过继承方式,可以改变对基类成员的访问权限; (2).可以对对基类成员函数进行重定义

山年继承继承Teacher类Person类Student类char Name[20];char Name[20];+char Name[20];+char Sex;+char Sex,tchar Sex,int Age;pint Age;intAge;void Register(char*,int, char);void Register(char *,int,char);void Register(char *, int, char);voidShowMe();voidShowMe():void ShowMe();int Number,+char Department[10];+charClassName[10];float salaryivoid Register(char*classname,新增及调整的成员void Register(char * dept,int number, char* name, intage, char sex);+float salary, char* name, intvoid ShowStu();+age, char sex);voidShowMe();
9 继 承 继 承 新增及调整的成员