C++铁道出版社第2版第五章.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C++铁道出版社第2版第五章.ppt》由会员分享,可在线阅读,更多相关《C++铁道出版社第2版第五章.ppt(111页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+铁道出版社第铁道出版社第2版版第五章第五章 第五章第五章 继承与派生继承与派生 5.1 5.1 继承与派生的概念继承与派生的概念 5.2 5.2 派生类的构造函数和析构函数派生类的构造函数和析构函数 5.3 5.3 调整基类成员在派生类中的调整基类成员在派生类中的 访问属性的其他方法访问属性的其他方法 5.4 5.4 多继承与虚基类多继承与虚基类 5.5 5.5 赋值兼容规则赋值兼容规则 本章主要内容本章主要内容第第五五章章 继承与派生继承与派生 第五章第五章 继承与派生继承与派生5.1 5.1 继承与派生的概念继承与派生的概念 5.1.1 5.1.1 为什么要使用继承为什么要使用继承 5
2、.1.2 5.1.2 派生类的声明派生类的声明 5.1.3 5.1.3 基类成员在派生类中的访问属性基类成员在派生类中的访问属性 5.1.4 5.1.4 派生类对基类成员的访问规则派生类对基类成员的访问规则 本节主要内容本节主要内容 第五章第五章 继承与派生继承与派生5.1.1 5.1.1 为什么要使用继承为什么要使用继承图图5.1 5.1 简单的汽车分类图简单的汽车分类图 汽车汽车运输汽车运输汽车专用汽车专用汽车客车客车货车货车消防车消防车洒水车洒水车 所谓继承就是从所谓继承就是从先辈处得到属性和行先辈处得到属性和行为特征。为特征。 第五章第五章 继承与派生继承与派生 假设有两个类假设有两个
3、类-类类A A 和和类类B B,若,若类类B B继承继承类类A A A ( A (基类基类或或父类父类) ) B ( B (派生类派生类或或子类子类) ) 则则类类B B具有具有类类A A的基本特性(包括的基本特性(包括数据数据和和程序代码程序代码) 类的继承类的继承就是就是新的类新的类从从已有类已有类那里得到已那里得到已有的特性。有的特性。 第五章第五章 继承与派生继承与派生 继承机制的作用:继承机制的作用: 类的继承机制使程序员类的继承机制使程序员无需修改已有类无需修改已有类, ,只需在只需在已有类的基础上已有类的基础上, ,通过增加少量代码或修改少量代码通过增加少量代码或修改少量代码的方
4、法得到新的类的方法得到新的类, ,从而较好地解决了代码重用的问从而较好地解决了代码重用的问题。题。 由已有类产生新类时由已有类产生新类时, ,新类便包含了已有类的特新类便包含了已有类的特征征, ,同时也可以加入自己的新特性。同时也可以加入自己的新特性。 第五章第五章 继承与派生继承与派生 如果类如果类B B是类是类A A 的派生类的派生类, ,那么那么, ,在构造类在构造类B B的时候的时候: : 1. 1.不必重新描述不必重新描述派生类派生类B B的所有特性的所有特性, ,只需让它继只需让它继承承类类A A的特性的特性; ; 2. 2. 增加增加类类B B与与基类基类A A不同的那些特性。不
5、同的那些特性。 继承来的继承来的特性特性 派生类派生类的特性的特性 新增加的新增加的特性特性 第五章第五章 继承与派生继承与派生5.1.2 5.1.2 派生类的声明派生类的声明class Studentclass Student / /声明学生声明学生StudentStudent public: public: void print() void print() coutnumber:numberendl;coutnumber:numberendl; coutname:nameendl; coutname:nameendl; coutscore:scoreendl; coutscore:sco
6、reendl; protected:protected: int number; /int number; /学号学号 string name; /string name; /姓名姓名 float score; /float score; /成绩成绩; 第五章第五章 继承与派生继承与派生class UStudentclass UStudent / /声明大学生类声明大学生类UStudentUStudent public: public: void print1() void print1() coutnumber:numberendl;coutnumber:numberendl; coutna
7、me:nameendl; coutname:nameendl; coutscore:scoreendl; coutscore:scoreendl; coutmajor:majorendl; coutmajor:majorendl; private: private: int number; /int number; /学号学号 string name; /string name; /姓名姓名 float score; /float score; /成绩成绩 string major; /string major; /专业专业;这这3 3行在类行在类StudentStudent中中已存在已存在这
8、这3 3行在类行在类StudentStudent中中已存在已存在 第五章第五章 继承与派生继承与派生class Studentclass Student public: public: void print(); void print();protected:protected: int number; int number; string name; string name; float score; float score; ;class UStudent:class UStudent:publicpublic Student Student public: public: void pr
9、int1() void print1() print();print(); coutmajor:majorendl; coutmajor:majorendl; private: private: string major; /string major; /专业专业;基类名基类名派生类名类派生类名类基类名基类名继承继承方式方式被继承被继承的部分的部分新增加新增加的部分的部分 第五章第五章 继承与派生继承与派生 声明一个派生类的一般格式为:声明一个派生类的一般格式为: class class 派生类名派生类名 继承方式继承方式 基类名基类名 派生类新增的数据成员和成员函数派生类新增的数据成员和成员
10、函数 ; 第五章第五章 继承与派生继承与派生 class employee class employeepublicpublic person person / / ; class employee class employeeprivateprivate personperson / / ; class employee class employeeprotectedprotected person person / / ; 默认的继承方式为:默认的继承方式为:privateprivate 公有继承公有继承私有继承私有继承保护继承保护继承 第五章第五章 继承与派生继承与派生class bas
11、eclass base public: public: int y;int y; void show( ) void show( ) couty;couty; ; ;class derived : public baseclass derived : public base public: public: void print( ) void print( ) couty;couty; . ; . ; . . . base obj; base obj; coutobj.y; coutobj.y; 基类中的基类中的公有成员公有成员 基类的成员函数基类的成员函数可以访问可以访问 派生类的成员函派生
12、类的成员函数可以访问数可以访问 (在类外在类外) )基类的基类的对象对象可以访问可以访问基类成员的访问规则 第五章第五章 继承与派生继承与派生 class baseclass base private: private: int y;int y; void show( ) void show( ) couty;couty; ; ;class derived : public baseclass derived : public base public: public: void print( ) void print( ) couty;couty; . ; . ; . . base obj;
13、base obj; coutobj.y; coutobj.y; 基类中的基类中的私有成员私有成员 基类的成员函基类的成员函数可以访问数可以访问 派生类的成员函派生类的成员函数不能直接访问数不能直接访问 ( (在类外在类外) )基类的对基类的对象象不能直接访问不能直接访问 第五章第五章 继承与派生继承与派生 class baseclass base protected: protected: int y; int y; void show( ) void show( ) couty;couty; ; ;class derived : public baseclass derived : publ
14、ic base public: public: void print( ) void print( ) couty;couty; . ; . ; . . . . . . base obj; base obj; coutobj.y; coutobj.y; 基类中的基类中的保护成员保护成员 基类的成员函基类的成员函数可以访问数可以访问 派生类的成员派生类的成员函数可以访问函数可以访问 ( (在类外在类外) )基类的基类的对象对象不能直接访问不能直接访问 第五章第五章 继承与派生继承与派生 从已有类派生出新类时从已有类派生出新类时, ,可以在派生类内完成以可以在派生类内完成以下几种功能下几种功能:
15、: (1) (1) 可以增加新的数据成员。可以增加新的数据成员。 (2) (2) 可以增加新的成员函数。可以增加新的成员函数。 (3) (3) 可以对基类的成员进行重定义。可以对基类的成员进行重定义。 (4) (4) 可以改变基类成员在派生类中的访问属性。可以改变基类成员在派生类中的访问属性。 这些内容将下面章节中详细介绍。这些内容将下面章节中详细介绍。 第五章第五章 继承与派生继承与派生 5.1.3 5.1.3 基类成员在派生类中的访问属性基类成员在派生类中的访问属性 class A class A private:private: int x;int x; public:public: i
16、nt y;int y; protected:protected: int z; int z; ; class B : class B :privateprivate( (或或public,protectedpublic,protected)A)A . . . . ; ;问题:基类成员问题:基类成员x x、y y、z z的访问的访问属性在派生类中有什么变化属性在派生类中有什么变化? ? 基类成员基类成员x x、y y、z z在派生类中访问属在派生类中访问属性的变化是与继承性的变化是与继承的方式有关的。的方式有关的。 第五章第五章 继承与派生继承与派生1. 1. 私有继承时私有继承时class A
17、 class A private:private: int X;int X; public: public: int Y;int Y; protected: protected: int Z;int Z; ; class B : class B : privateprivate A A X X 不允许派生类继承不允许派生类继承, ,不可直接访问不可直接访问。 Y Y 在派生类中以在派生类中以私有成员私有成员的身份出现的身份出现 Z Z 在派生类中以在派生类中以私有成员私有成员的身份出现。的身份出现。 私有继承私有继承 第五章第五章 继承与派生继承与派生 2.2.公有继承时公有继承时class
18、A class A private:private: int X;int X; public:public: int Y;int Y; protected:protected: int Z;int Z; ; class B : class B : publicpublic A A X X 不允许派生类继承不允许派生类继承, ,不可直接访问。不可直接访问。 Y Y 在派生类中仍以在派生类中仍以公有成员公有成员的身份出现的身份出现 Z Z 在派生类中仍以在派生类中仍以保护成员保护成员的身份出现的身份出现 公有继承公有继承 第五章第五章 继承与派生继承与派生3.3.保护继承时保护继承时class A
19、 class A private: private: int X;int X; public:public: int Y; int Y; protected:protected: int Z;int Z; ; class B : class B : protectedprotected A A X X 不允许派生类继承不允许派生类继承, ,不可直接访问不可直接访问。 Y Y 在派生类中以在派生类中以保护成员保护成员的身份出现的身份出现 Z Z 在派生类中仍以在派生类中仍以保护成员保护成员的身份出现的身份出现 保护保护继承继承 第五章第五章 继承与派生继承与派生 第五章第五章 继承与派生继承与派
20、生5.1.4 5.1.4 派生类对基类成员的派生类对基类成员的访问规则访问规则 派生类对基类成员的访问形式主要有以下两种派生类对基类成员的访问形式主要有以下两种: :class A class A public:public: int x;int x;class B : class B : 派生方式派生方式 AA print() print() coutx;coutx; ; int main( ) int main( ) B b1; B b1; cout coutb1.xb1.x; ; return 0; return 0; 内部访问内部访问 由派生类中新由派生类中新增的增的成员函数成员函数对
21、基类继承来对基类继承来的成员的访问的成员的访问 对象访问对象访问 在派生类外部在派生类外部, ,通过通过派生类的对象派生类的对象对从基类继对从基类继承来的成员的访问承来的成员的访问 第五章第五章 继承与派生继承与派生class A class A int x;int x; public:public: int y; int y; protected:protected: int z; int z; ;class B :class B :privateprivate A A print() / print() /访问访问x ?,y?,z? x ?,y?,z? (内部访问)(内部访问); main
22、( ) main( ) B b1; /b1 B b1; /b1 访问访问x?,y ?,z? x?,y ?,z? ( (对象访问对象访问) ) . . . . . . 私有继承私有继承1. 1. 私有继承的访问规则私有继承的访问规则 第五章第五章 继承与派生继承与派生 第五章第五章 继承与派生继承与派生例例5.15.1一个私有继承的例子。一个私有继承的例子。#include#includeusing namespace std;using namespace std;class Bclass B /声明基类声明基类B B public: public: void getx(int n) x=n;
23、 void getx(int n) x=n; void dispx() coutxendl; void dispx() coutxendl; private: private: int x; int x; ;class D:private Bclass D:private B /声明一个私有派生类声明一个私有派生类 public: public: void getxy(int n,int m) void getxy(int n,int m) getx(n);getx(n); y=m; y=m; void dispxy() void dispxy() cout coutx xendl; cout
24、yendl; endl; coutyendl; private: private: int y; int y;私有私有继承继承 getx() getx()在派生类中在派生类中为私有成员为私有成员, , 派生类派生类成员函数成员函数g getxy()etxy()可以可以访问它访问它 非法非法, ,基类中基类中的 私 有 成 员的 私 有 成 员 x x , , 不允许派生类成不允许派生类成员函数员函数dispxy()dispxy()直接访问它直接访问它 第五章第五章 继承与派生继承与派生例例5.15.1一个私有继承的例子。一个私有继承的例子。#include#includeusing names
25、pace std;using namespace std;class Bclass B / /声明基类声明基类B B public: public: void getx(int n) x=n; void getx(int n) x=n; void void dispx()dispx() coutxendl; coutxendl; private: private: int x; int x; ;class D:private Bclass D:private B /声明一个私有派生类声明一个私有派生类 public: public: void getxy(int n,int m) void g
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 铁道 出版社 第五
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内