我们称C++为面向对象的编程,前面我们讲了OOP的多态、封装,这一讲我们将学习继承。
何谓继承?
能够从已有的类派生出新的类,而派生类继承了原有类(称为基类)的特征,包括方法,然后在此基础上添加派生类的新特性。
继承在派生类上可以完成的工作:
- 可以在已有类的基础上添加新功能;
- 可以给类添加数据;
- 可以修改类方法的行为。
为何要继承?
首先,OOP的主要目的之一是提供可重用的代码。当开发的项目十分庞大时,重用经过测试的代码将比重新编写代码要好得多,包括节省时间、降低程序出错的可能性。
继承的高级性(优越性):
传统的C函数库通过预定义、预编译的函数(如strlen()和rand()这些可以在程序中使用的函数)提供了可重用性。很多厂商都提供了专用的C库,这些专用库提供标准C库没有的函数,但是这些函数库有局限性,除非厂商提供了库函数的源代码,否则我们将无法根据自己特定的需求对函数进行扩展或修改,而必须根据库的情况修改自己的程序。即使厂商提供了源代码,在修改时也有一定的风险。
而C++类提供了更高层次的重用性。目前,很多厂商提供了类库,类库由类声明和实现构成。因为类组合了数据表示和类方法,因此提供了比函数库更加完整的程序包。例如,单个类就可以提供用于管理对话框的全部资源。通常,类库是以源代码的方式提供的,这意味着可以对其进行修改,以满足需求。然而,C++提供了比修改代码更好的方法来扩展和修改类——类继承。他能够从已有的类派生出新的类,而派生类继承了原有类(称为基类)的特征,包括方法。正如继承一笔财产要比自己白手起家容易一样,通过继承派生出的类通常比设计新类要容易得多。
此外,相比于需要通过复制原始类代码并对其进行修改来给原有类添加功能、添加数据、修改方法行为以实现期望的类,继承机制只需提供新特性,甚至不需要访问源代码就可以派生出类,因此不需要访问源代码就可以派生出类。因此,如果购买的类库只提供了类方法的头文件和编译后代码,仍可以使用库中的类派生出新的类。而且可以在不公开实现的情况下将自己的类分发给其他人,同时允许他们在类中添加新特性。
上面是关于类继承的引文。
========================兴趣是最好的老师=============================
关于类继承的具体内容,希望大家看书自己理解。我将把key-point贴出来。
【关键词】
基类
派生类
派生类需要自己的构造函数
派生类的权限
3种继承方式:公有继承、保护继承和私有继承
继承:is-a关系
多态公有继承
静态联编和动态联编
虚(成员)函数
访问控制:protected
抽象基类
继承和动态内存分配
keypoint1——成员初始化列表
下面是一个TableTennisPlayer类,其用于记录会员的姓名以及是否有球桌:
1 // tabtenn0.h -- a table-tennis base class 2 #ifndef TABTENN0_H_ 3 #define TABTENN0_H_ 4 #include <string> 5 using std::string; 6 // simple base class 7 class TableTennisPlayer 8 { 9 private: 10 string firstname; 11 string lastname; 12 bool hasTable; 13 public: 14 TableTennisPlayer (const string & fn = "none", 15 const string & ln = "none", bool ht = false); 16 void Name() const; 17 bool HasTable() const { return hasTable; }; 18 void ResetTable(bool v) { hasTable = v; }; 19 }; 20 #endif