首页 理论教育公共接口的设计及应用-C++程序设计基础教程

公共接口的设计及应用-C++程序设计基础教程

【摘要】:一个统一的公共接口必须经过精心的分析和设计。将这些函数作为基类的虚函数,它们定义了一个统一公共接口。利用虚函数,可在基类和派生类中使用相同的函数名定义函数的不同实现,从而实现“一个接口,多种方式”。设计一个公共基类Container为抽象类(界面),Container类中声明求表面积和体积的纯虚函数。由Container抽象类派生出三个类即Cube、Sphere和Cylinder,在这三个类中都具有求表面积和体积的重定义版本。

在类层次结构中,尽可能地为类设计一个统一的公共接口(界面),即采用抽象基类设计方法。一个统一的公共接口必须经过精心的分析和设计。通常采用如下策略:

(1)分析相关对象的需求,设计出一组实现公共功能的函数。

(2)将这些函数作为基类的虚函数(或纯虚函数),它们定义了一个统一公共接口。

(3)由该基类派生出若干子类,在各个子类中实现这些虚函数。

利用虚函数,可在基类和派生类中使用相同的函数名定义函数的不同实现,从而实现“一个接口,多种方式”。当用基类指针或引用对虚函数进行访问时,软件系统将根据运行时指针,或引用所指向的实际对象来确定调用对象所在类的虚函数版本。

【例7.8】编写一个程序计算正方体、球体和圆柱体的表面积和体积。

解:求解本题的过程如下:

(1)分析问题,从正方体、球体和圆柱体的各种运算功能中抽象公共的功能,主要包括求表面积和体积功能。

(2)设计一个公共基类Container为抽象类(界面),Container类中声明求表面积和体积的纯虚函数(该抽象类本身是没有表面积和体积可言的)。另外,Container类中定义一个公共的数据成员radius,此数据可作为球体的半径、正方体的边长、圆柱体底面圆半径。

(3)由Container抽象类派生出三个类即Cube、Sphere和Cylinder,在这三个类中都具有求表面积和体积的重定义版本(surface_area、volume函数作为公共接口)。这些类之间构成的类层次如图7.5所示。(www.chuimin.cn)

图7.5 类层次

程序如下:

本程序的执行结果如下:

正方体表面积:96

正方体体积:64

球体表面积:452.39

球体体积:904.781

圆柱体表面积:314.16

圆柱体体积:392.7