1 / 49
文档名称:

第5章 继承与派生.doc

格式:doc   页数:49页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第5章 继承与派生.doc

上传人:drp539605 2015/6/5 文件大小:0 KB

下载得到文件列表

第5章 继承与派生.doc

相关文档

文档介绍

文档介绍:第5章继承与派生
面向对象程序设计有4个特点:抽象、封装、继承和多态性。前面3章学****了对类和对象的最基本操作,对抽象性和封装性有了足够的认识。下面我们要来了解继承性和多态性。
继承是C++语言的一种重要机制,该机制自动地为一个类提供来自另一个类的操作和数据结构,这使得程序员只需在新类中定义已有类中没有的成分来建立新类。
有了继承,过去的代码就可以不被丢弃,只要稍加修改就可重用。类的继承使简单的代码慢慢发展到丰富的高级代码,程序会越来越完善,功能越来越强大。
没有继承就等于没有面向对象的程序设计,继承性是面向对象程序设计中最重要的特性。当然继承的过程面临许多问题,下面我们来一一解答。
继承与派生的概念
C++中可重用性是通过继承来实现的。因此,继承是C++的一个重要组成部分。前面介绍了类,一个类中包含数据成员和成员函数。不同的类中,数据成员和成员函数是不相同的。但有时两个类的内容基本相同或一部分相同。这样自然就想到,能否利用原来声明的类作为基础以减少重复工作量。C++的继承机制就可以解决这个问题。
在C++中,所谓”继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类称为基类或父类。新建立的类称为派生类或子类。
其实在现实生活中就存在继承关系。如下所示。
上图是交通工具的类层次,最顶部的交通工具为基类。这个基类会有飞机类、汽车类、火车类等等,图中只画出了汽车类。汽车类以交通工具类为父类,相对交通工具类来说汽车类是子类。汽车类有三个子类,小汽车类、卡车类、旅行车类,它们以汽车类作为父类,此时交通工具类是它们的祖先类,简称祖类。图中展示了四层结构,从上到下它们是派生的关系,从下到上是继承的关系。
面向对象程序设计可以让你声明一个新类作为另一个类的派生。派生类(也称子类)继承它父类的属性和操作。子类也声明了新的属性和新的操作,剔除了那些不适合于其用途的继承下来的操作。这样,继承可让你重用父类的代码,专注于为子类编写新代码。
那些父类已经存在,在新的应用中,你无须修改父类。所要做的就是派生子类,在子类中做一些增加与修改。这种机制,使重用成为可能。
我们来看P150中类Student和类Student1的定义,这两个类中有很多相同的部分,只是Student1中新增加了二个数据成员,成员函数display也有了一些变化。这样我们可以在Student的基础上加上新的内容来定义Student1,以减少重复工作量。
以上介绍的是最简单的情况:一个派生类只从一个基类派生,这称为单继承,如果一个派生类有两个或多个基类的称为多重继承。
如下图所示为最简单的单继承结构图
A
B
下二个图为最简单的多重继承的结构图
A
B
C
A
B
C
D
派生类的声明方式
声明派生类的一般形式为:
class 派生类名:[继承方式] 基类名//继承方式包括public、private(默认)、protected
{
派生类新增加的成员
}
派生类对象包括两个部分,一个为基类部分,另一个是派生类部分。派生类部分总是依附于基类的,派生类对象中总是含有基类的成员。
显然,派生类对象比基类对象大,它保存了更多的数据,提供了更多的操作。
//定义书中提供的Student1,Student作为基类。
#include <iostream>
#include <string>
using namespace std;
class Student
{public:
Student()
{cin>>num>>name>>sex;}
void display( )
{cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;}
private :
int num;
string name;
char sex;
};
class Student1: public Student //声明基类为Student,定义派生类是Student1
{public:
Student1()
{cin>>age>>addr;}
void display_1() //新增加的成员函数
{ cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl;}
private:
int age; //新增加的数据成员
string addr; //新增加的数据成员
};
派生类的构成
派生类中的成员包括两大部分:1)基类继承过来的成员2)自己增加的成员。从基类继承的成员