“一切以简单为美“
C++中的类型繁多,其中包括(具体)类、基类、接口、结构、枚举、数组等。在此规范中,我们不详细讨论抽象类和接口,因为这两个类型属于一个特殊的逻辑分组,和扩展性有关,我们在扩展性设计规范中进行讨论。
任何的编程语言都可以看成是一个类型系统。在这个类型系统中,每个类型都扮演这各自的职责,各有其意义:
n (具体)类:在遵循某个特定的开发封闭原则的前提下的对行为和属性的封装。使用class声明。
n 基类:在遵循某个特定的开发封闭原则的前提下的对行为和属性的适度封装。使用class声明。
n 接口:抽象了某个/某些特定的行为,为对象提供了一种抽象的分类准则,它应该是基本稳定的。使用interface声明。
n 结构:用于定义小而简单的类型。使用struct声明。
n 枚举:用于定义一小组值,这一小组值代表着一个逻辑分类。如一星期中的每天。
在类型系统中不同的类型适用于不同的用途,因此遵循着不同的规则,代表着不同的意义。
l
推荐使用基类,如果:
a.
实现某个特定的接口
(
可选)
b.
对于子类,它的确具有抽象意义
c.
它通过与子类共享成员(属性、函数)或/和定义虚函数来实现抽象
d.
它具有/不具有状态
l
推荐使用抽象类,如果:
e.
具有基类的所有特征
f.
不能被实例化(至少具有一个纯虚函数)
l
推荐使用接口,如果:
a.
它代表了一类行为的抽象,这样的一类行为可以作为一种分类规则区别其他不同类的对象
b.
它的定义应该是基本稳定的,否则考虑使用抽象类而不是接口
c.
它定义功能而不是实现功能,不具有任何状态
d.
精心定义的接口只做一件事情
l
推荐使用结构,如果:
a.
它在逻辑上代表一个独立的值,与基本类型(int、double等)相似
b.
它不需要虚函数(包括虚析构函数)
c.
它总是在栈中被实例化,实例比较小而且生命周期比较段或经常被内嵌在其他对象中
l
推荐使用静态类,如果你设计的类具有下面的特征:
a.
它定义的所有的函数都是public static的
b.
它不需要被实例化
c.
它往往被用于定义一些帮助函数或基于简单性的考虑来整合某个特定的功能。
√ 要求区分接口、结构和类: