面向对象编程的主要目的之一是提供可重用的代码。C语言中通过函数来提高代码的可重用性,但是,函数有一定的局限性,当你需要根据自己的需求修改代码时,会存在一定的风险,如不经意地修改函数的工作方式或改变了库函数之间的关系。
而C++类提供了更高层次的重用性。虽然我们也可以通过修改函数来满足需求,但是C++提供了比修改代码更好的方法来扩展和修改类。这种方法就叫做继承,它能够从已有的类派生出新的类,而派生类继承了原有类(称为基类)的特征,包括方法。通过继承派生出来的类通常比设计新类容易的多。下面是可以通过继承完成的一些工作。
(1)可以在已有的类的基础上添加功能。例如:对于数组类,可以添加数学运算。
(2)可以给类添加数据。例如:对于字符串类,可以派生出一个类,并添加指定字符串显示颜色的数据成员。
(3)可以修改类的方法的行为。例如:对于代表提供给飞机乘客的服务的Passenger类,可以派生出提供更高级别服务的FirstClassPassenger类。
下面举一些例子,帮助理解类。
水果与香蕉。在水果这个类中,可以保存水果的重量和热量。明显大家都知道香蕉是水果的一种,所以从水果这个类中派生出香蕉这个类,新类(派生类)会继承原来的类(基类)的所有数据成员,所以,香蕉类中也包含重量和热量的成员。而且,新类还可以添加自己特有的属性,例如种类等等。
上面的例子只是一个简单的继承。
下面介绍一下抽象继承。
先举一个例子:有两个类,圆和椭圆,圆是椭圆的一种特殊情况(长轴和短轴等长的椭圆)。因此,所有的圆都是椭圆,可以从椭圆类里面派生出圆类来。但是,在实现细节是就会发现许多问题。首先考虑椭圆类中包含的内容。数据成员可以包含椭圆中心的坐标、长半轴、短半轴以及方向角。成员函数可以包括移动椭圆、返回椭圆面积、旋转椭圆和放缩长半轴和短半轴等等。虽然圆是一种椭圆,但是,圆只需要一个半径就可以描述大小和形状,并不需要有长半轴、短半轴,也不需要方向角这个参数和放缩长半轴和短半轴这个成员函数。解决这种问题有一种方法就是从椭圆类和圆类中抽象出它们的共性,将这种共性放在一个类中,再从这个类中派生出椭圆类和圆类。这个类就是抽象类,抽象类是没有对象的。例如在抽象类中可以包含中心点的坐标,移动、返回面积,椭圆类继承抽象类后可以添加长半轴、短半轴以及方向角数据成员还有旋转椭圆和放缩长半轴和短半轴的成员函数,圆类继承后可以只需添加半径这个数据成员即可。
继承是面向对象的一个很重要的部分,学习好继承是非常重要的。
原文地址:http://www.cnblogs.com/zhangmiao14/p/3737857.html