条款19:设计class犹如设计type
class的设计就是type的设计,在定义一个新的type之前,考虑以下问题:
-
新的type对象该如何被创建销毁? 这会影响到
class的构造函数和析构函数以及内存的分配函数和释放函数的设计。 -
对象初始化和对象赋值应该有什么差别不要混淆初始化和赋值,这将决定构造函数和赋值操作符的行为。
-
新type对象如果被值传递,这将意味着什么?
copy构造函数用来定义一个type的值传递应该如何实现。 -
什么是新type的合法值? 对于成员变量而言,只有有些数值集是有效的。
-
你的新type需要配合继承图系吗?
- 继承:受到基类的束缚
- 被继承:影响你所声明的函数——尤其是析构函数——是否为virtual。
-
你的新type需要什么样的转换?
-
什么样的操作符核函数对此新的type是合理的? 这个问题将决定你的class声明哪些函数
-
什么样的标准函数应该被驳回 这些正是你必须声明为private的
-
谁改取用新type的成员? 这些帮助决定那些成员为public,哪些为protedted,哪些为private。也帮助决定哪一个class和/或function应该是友元,以及将他们嵌套到另一个之内是否合理。
-
什么是type的“未声明接口”? 他对效率、异常安全性以及资源运用提供何种保证?你讲在这些方面提供的保证将为你的class实现代码加上相应的约束条件
-
你的type有多么一般化 或许你并非定义了一个新type,而是定义了一整个types家族。如果果真如此,你就不应该定义一个新的class,而是定义一个新的class template(模板类)
-
你真的需要一个新type吗? 如果只是定义一个新的子类以便为既有的class添加机能,说不定单纯定义一个或多个non-number函数或者templates更能够达到目标。
本文探讨了在设计Class时应考虑的关键问题,包括对象的创建与销毁、初始化与赋值的区别、值传递的含义、合法值的定义、继承的影响、类型转换、操作符与函数的合理性、接口的未声明部分、类型的泛化程度以及是否真的需要一个新类型。

823

被折叠的 条评论
为什么被折叠?



