C++就像其它的OOP语言一样当你定义一个新class,也就定义了一个新的type。身为C++程序员,你的许多时间主要用来扩张你的类型系统(type system)。因此你应该带着和“语言设计者当初设计语言内置类型时”一样的谨慎来研讨class的设计
如何设计高效的classes呢?首先你必须了解你面对的问题。几乎每一个class都要求你面对以下的提问,而你的回答往往导致你的设计规范。
1) 新的type对象应该如何被创建和销毁、这会影响你的class的构造函数和析构函数以及内存分配函数和释放函数。
2) 对象的初始化和对象的赋值该有什么样的差别。它决定你的构造函数和赋值操作符有的行为。
3) 新type的对象如果被passed by value(以值传递),意味着什么。copy构造函数用来定义一个type的pass-by-value该如何实现
4) 什么是新type的合法值。对class的成员变量而言,通常只有某些数值集是有效的。它决定了你的class必须维护的约束条件。
5) 你的新type需要配合某个继承图系(inheritance graph)。在继承某些既有的classes时,你就受到这些classes的设计和束缚,尤其要注意的是函数的virtual性。
6) 你的新type需要什么样的转换。如果你要它有相应的类型转换就必须在类中提供相应的函数
7) 什么样的操作符和函数对此新type而言是有合理的。它决定了你将为你的class声明哪些函数
8) 什么样的标准函数应该驳回。这正是你需要声明为private者
9) 谁该取用新type的成员。它决定了哪个成员为public,哪个为protected,哪个为private。
10) 什么是新type的“未声明接口”(undeclared interface)。
11) 你的新type有多少一般化。它决定了你是该声明一个class,还是声明一个class template。
12) 你真的需要一个新的type吗。这决定了你该继承一个类,还是对这个class声明一些函数,就可以达到功能。
总结:
class的设计是type的设计,在定义一个新type之前,请确定你已经考虑过上面提到的所有讨论主题