C++继承与派生的概念

来源:互联网 发布:淘宝买家具很久不发货 编辑:程序博客网 时间:2024/06/04 18:39
在C++中可重用性是通过继承(inheritance)这一机制来实现的。因此,继承是C++的一个重要组成部分。

根据类的知识,一个类中包含了若干数据成员和成员函数。在不同的类中,数据成员和成员函数是不相同的。但有时两个类的内容基本相同或有一部分相同,例如已经声明了学生基本数据的类Student:

class Student{public:   void display( )    //对成员函数display的定义   {      cout<<"num: " <<num<<endl;      cout<<"name: "<< name <<endl;      cout <<"sex: "<<sex<<endl;   }private:   int num;   string name;   char sex;};

如果学校的某一部门除了需要用到学号、姓名、性别以外,还需要用到年龄、地址等信息。当然可以重新声明另一个类class Student1:

class Student1{public:   void display( )  //此行原来已有   {      cout<<"num: " <<num<<endl;  //此行原来已有      cout<<"name: "<< name <<endl;  //此行原来已有      cout <<"sex: "<<sex<<endl;  //此行原来已有      cout <<"age: "<<age<<endl;      cout <<"address: "<<addr<<endl;   }private:   int num;  //此行原来已有   string name;  //此行原来已有   char sex;  //此行原来已有   int age;   char addr[20];};

可以看到有相当一部分是原来已经有的,可以利用原来声明的类Student作为基础,再加上新的内容即可,以减少重复的工作量。C++提供的继承机制就是为了解决这个问题。

在C++中,所谓“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类(base class)”或“父类(father class)”,新建的类称为“派生类(derived class)”或“子类(son class )”。

一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。通过继承,一个新建子类从已有的父类那里获得父类的特性。从另一角度说,从已有的类(父类)产生一个新的子类,称为类的派生。类的继承是用已有的类来建立专用类的编程技术。派生类继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或调整。一个基类可以派生出多个派生类,每一个派生类又可以作为基类再派生出新的派生类,因此基类和派生类是相对而言的。一代一代地派生下去,就形成类的继承层次结构。相当于一个大的家族,有许多分支,所有的子孙后代都继承了祖辈的基本特征,同时又有区别和发展。与之相仿,类的每一次派生,都继承了其基类的基本特征,同时又根据需要调整和扩充原 有的特征。

以上介绍的是最简单的情况:一个派生类只从一个基类派生,这称为单继承(single inheritance),这种继承关系所形成的层次是一个树形结构,如图11.3所示。

一个派生类不仅可以从一个基类派生,也可以从多个基类派生。也就是说,一个派生类可以有一个或者多个基类。一个派生类有两个或多个基类的称为多重继承(multiple inheritance)。关于基类和派生类的关系,可以表述为派生类是基类的具体化,而基类则是派生类的抽象。


下面先通过一个例子来说明怎样通过继承来创建派生类,先从最简单的单继承开始。
假设已经声明了一个基类Student,在此基础上通过单继承建立一个派生类Student1:

class Student1: public Student  //声明基类是Student{public:   void display_1( ) //新增加的成员函数   {      cout<<"age: "<<age<<endl;      cout<<"address: "<<addr<<endl;   }private:   int age;  //新增加的数据成员   string addr;  //新增加的数据成员};

仔细观察第一行:
 class Student1: public Student
在class后面的Student1是新建的类名,冒号后面的Student表示是已声明的基类。在Student之前有一关键宇public,用来表示基类Student中的成员在派生类Studeml中的继承方式。基类名前面有public的称为“公用继承(public inheritance)”。

仔细阅读以上声明的派生类Student1和基类Student,并将它们放在一起进行分析。

声明派生类的一般形式为:
    class 派生类名:[继承方式] 基类名    {        派生类新增加的成员    };
继承方式包括public (公用的)、private (私有的)和protected(受保护的),此项是可选的,如果不写此项,则默认为private(私有的)。
0 0
原创粉丝点击