第 8 章
继承和派生
*
1
江苏科技大学计算机科学与工程学院计算机基础教学部
第8章 继承和派生
基类和派生类
继承
冲突、支配规则和赋值兼容性
静态成员
友元函数与有元类
虚基类
Date
2
江苏科技大学计算机科学与工程学院计算机基础教学部
基类和派生类
面向对象技术强调软件的可重用性。在VC++中可重用性是通过“继承”这一机制来实现的。
设有一个类STU ,如下所示: class STU { long int num; char name[10]; public: void show( ) { cout<<”num=”<<num<<”name=”<<name;} };
现要定义一个增加性别、年龄的类STU1,该如何解决?
方法一:重新定义一个全新的类STU1 ;
1
char sex;
int age;
方法二:以原有的类STU为基础, 定义一个与其有继承关系的类STU1 ,在类STU1中增加成员sex和age 。
Date
3
江苏科技大学计算机科学与工程学院计算机基础教学部
基类和派生类的概念
VC++中,可以通过一个已有的类来定义一个新的类,在新类中可以包含原有类的全部或部分成员,同时,新定义的类也可以有自己的新成员。这个在原有类的基础上生成新类的过程称之为类的继承,其中新生成的类称为派生类或子类,而原有的类则称为基类或父类。
一个派生类可以由一个基类派生,也可以由多个基类派生。从一个类派生出新类的过程称为单一继承;从多个类派生出新类的过程称为多重继承。
类A
类B
图8-1 单一继承
派生类可以作为基类;
类C
类D
类A
类B
图8-2 多重继承
类C
一个基类可派生出多个派生类。
Date
4
江苏科技大学计算机科学与工程学院计算机基础教学部
继承
单一继承
多重继承
派生类的构造函数
派生类的析构函数
*
5
江苏科技大学计算机科学与工程学院计算机基础教学部
单一继承
1、单继承的基本格式:class 派生类名: 继承方式 基类名{
派生类新增加的成员
};
继承方式:public、private和protected;
缺省为private派生;
派生类中派生成员的访问属性由派生方式和派生成员在基类中原有的访问权限共同决定。
Date
6
江苏科技大学计算机科学与工程学院计算机基础教学部
class STU { long int num; char name[10]; public: void show( ) { cout<<num<<name;}};
class STU2{ char sex; int age; public: void show2( ) { cout<<sex<<age;}};
在说明类时,若在类名后加上“ :”、派生方式和已定义的类的名称(基类),则是从基类派生新类。
单一继承
: public STU //定义派生类STU2,基类是STU
派生类中的成员有两部分组成:(1)派生成员——从基类继承来的成员(STU::): 数据成员num、name ,函数成员show ;(2)新增成员——在派生类类体中定义的成员。
新增成员
派生类中的新增成员的访问属性由定义时的访问权限决定,派生类中的派生成员的访问属性又是怎样的呢?
Date
7
江苏科技大学计算机科学与工程学院计算机基础教学部
2、公有派生 公有派生的特点是派生成员(从基类中继承来的所有成员)在公有派生类中保持各个成员的访问权限不变。 表8-1 公有派生时派生成员的访问权限
单一继承
基类成员权限(原有权限)
派生成员权限
派生类内部访问方式
派生类外部访问方式
公有成员
公有成员
直接访问
直接访问
保护成员
保护成员
直接访问
间接访问
私有成员
私有成员
间接访问
间接访问
Date
8
江苏科技大学计算机科学与工程学院计算机基础教学部
class STUD { int x;public: int y;protected: int z;public: int getx( ){return x;} int gety( ){return
第八章-继承和派生 来自淘豆网www.taodocs.com转载请标明出处.