条款19 :设计class犹如设计type
2012-11-15 22:37
176 查看
当你定义了一个新的class时,也就定义了一个新的type。身为c++程序员,你有许多时间主要用来扩张你的类型系统。这意味着你并不只是class设计者,还是type设计者。重载函数和操作符,控制内存的分配和归还,定义对象的初始化和终结…全都在你的手上。因此你应该带着和“语言设计者当初设计语言内置类型时”一样的谨慎来研讨class的设计。
几乎每一个class都要求你面对以下提问。
新type的对象应该如何被创建和销毁?
对象的初始化和对象的赋值该有什么样的差别?(对应不同的函数)
新type的对象如果被pass by value,意味着什么?
什么是新type的合法值?对于于class成员变量来说,通常只有某些数值集是有效的。那些数值集决定了你的class必须维护的约束条件,也就决定了你的成员函数(如构造函数,赋值函数)必须进行的错误检查工作。它也影响函数抛出的异常,以及函数异常明细。
你的新的type需要配合某个继承体系吗?有没有受到vitual和non-virtual的影响?
你的新type需要什么样的转换?如果要转换,是不是要定义转换函数?
什么样的操作符和函数对此新type而言是合理的?
什么样的标准函数应该驳回?那些正是你必须声明为private者。
谁该取用新type成员?哪些是public?哪些是private?哪一个class或function是此type的友元?
什么是新type的未声明的接口?
你的新type有多么一般化?或许你其实并非定义一个新type,而是定义一整个types家族。果真如此你就不该定义一个新class,而是定义一个新的class template。
你真的需要一个新的type吗?
几乎每一个class都要求你面对以下提问。
新type的对象应该如何被创建和销毁?
对象的初始化和对象的赋值该有什么样的差别?(对应不同的函数)
新type的对象如果被pass by value,意味着什么?
什么是新type的合法值?对于于class成员变量来说,通常只有某些数值集是有效的。那些数值集决定了你的class必须维护的约束条件,也就决定了你的成员函数(如构造函数,赋值函数)必须进行的错误检查工作。它也影响函数抛出的异常,以及函数异常明细。
你的新的type需要配合某个继承体系吗?有没有受到vitual和non-virtual的影响?
你的新type需要什么样的转换?如果要转换,是不是要定义转换函数?
什么样的操作符和函数对此新type而言是合理的?
什么样的标准函数应该驳回?那些正是你必须声明为private者。
谁该取用新type成员?哪些是public?哪些是private?哪一个class或function是此type的友元?
什么是新type的未声明的接口?
你的新type有多么一般化?或许你其实并非定义一个新type,而是定义一整个types家族。果真如此你就不该定义一个新class,而是定义一个新的class template。
你真的需要一个新的type吗?
相关文章推荐
- 条款19:设计class犹如设计type
- 读书笔记《Effective C++》条款19:设计class犹如设计type
- 条款19:设计class犹如设计type
- Effective C++ -----条款19:设计class犹如设计type
- Effective c++条款19:设计class犹如设计type
- 条款19:设计class犹如设计type
- 条款19 设计class 犹如设计type
- Effective C++ 条款19 设计class犹如设计type
- 条款19:设计class犹如设计type
- 条款19:设计class犹如设计type
- <<Effective c++>>读书笔记---条款19:设计class犹如设计type
- 条款19:设计class犹如设计type
- 读书笔记《Effective c++》 条款19 设计class犹如设计type
- effective C++ 条款 19:设计class犹如设计type
- 条款19:设计class犹如设计type
- 条款19:设计class犹如设计TYPE(Treat class design as type design)
- Effective C++——》条款19:设计class犹如设计type
- 条款19 设计class 犹如设计type
- 《Effect C++》学习------条款19:设计class犹如设计type
- 《Effective C++》学习笔记条款19 设计class犹如设计type