<!--[endif]-->设计class犹如设计type(Treat class design as type design.)
设计class要带着和“语言设计者当初设计语言内置类型时”一样的谨慎来设计class。
class也是一个types,好的types具备自然的语法,直观的语义,以及一或多个高效实现品。
class设计checklist:
<!--[if !supportLists]-->1、
<!--[endif]-->新type的对象应该如何创建和销毁?
<!--[if !supportLists]-->2、
<!--[endif]-->对象的初始化和对象的赋值该有什么样的差别?这决定了class的构造函数和赋值(assignment)操作符的行为,以及其间的差别,很重要的是不要混淆了初始化和赋值。
<!--[if !supportLists]-->3、
<!--[endif]-->新type的对象如果被passed
by value(以值传递),意味着什么?copy的构造函数定义了一个type的pass-by-value该如何实现。
<!--[if !supportLists]-->4、
<!--[endif]-->什么是新type的合法值?对class的成员变量而言,通常只有某些数值集是有效的。那些数值集决定了你的class必须维护的约束条件,也就觉得了你的成员函数(特别是构造函数,赋值操作符以及所谓的seter函数)必须进行的错误检查。
<!--[if !supportLists]-->5、
<!--[endif]-->你的新的type需要配合某个继承体系吗?如果你继承自某些既有的class,你就受到那些class的设计的束缚,特别是他们的函数是virtual或no-virtual的影响。如果允许其他的classes继承你的class,那么你所声明的函数——尤其是析构函数——是否为virtual。
<!--[if !supportLists]-->6、
<!--[endif]-->你的新type需要什么样的转换?如果你希望类型T1之物被隐式转换为T2之物,就必须在T1内些一个类型转换函数operator T2或在T2内部写一个non-explicit-one-argument(可被单一实参调用)的构造函数。如果你只允许explicit构造函数存在,就得写出专门负责转换的函数,且不得为类型转换操作符(type
conversion operator)或non-explicit-one-argument构造函数。尽量避免隐式转换。
<!--[if !supportLists]-->7、
<!--[endif]-->什么样的操作符和函数对此新的type而言是合理的?
<!--[if !supportLists]-->8、
<!--[endif]-->什么样的标准函数应该被驳回?那些正是你声明为private的函数,比如,构造函数可能会声明为private,也就是不允许进行new操作。
<!--[if !supportLists]-->9、
<!--[endif]-->谁该取用type的成员?这可以决定哪些成员是public,那些成员是protected,那些为private,也可以决定哪些classes和function是friends。
<!--[if !supportLists]-->10、
<!--[endif]-->声明式新type的未声明接口?
<!--[if !supportLists]-->11、
<!--[endif]-->你的新type有多么的一般化?或许你其实并不是定义一个新type,而是定义一整个types家族。果真如此你就不应该定义一个新的class,而应该定义一个新的class template。
<!--[if !supportLists]-->12、
<!--[endif]-->你真的需要一个新的type吗?如果只是定义新的derived class以便为既有的class添加新机能,那么说不定单纯定义一个或多个non-members函数或template更能达到目的。
分享到:
相关推荐
条款19:设计class犹如设计type 条款20:宁以pass-by-reference-to-const替换Pass-by-value 条款21:必须返回对象时,别妄想返回其reference 条款22: 将成员变量声明为private 条款23: 宁以non-member、non-...
和其前一本兄弟书籍 Effective C++一样,More Effective C++对每一位以C++为开发工具的程序员而言,都必备读物。 继 Effective C++ 之後,Scott Meyers 於 1996 推出这本「续集」。条款变得比较少,页数倒是多了...
If you want to really and truly understand C++, you must read Effective C++. After first reading Effective C++, I had a totally new appreciation for and understanding of C++. And it's not just me: ...
当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机 (Some people say that C++ programmers can be divided into two categories: those ...
通常C++要求你对所使用的任何东西提供一个定义式,但如果它是个class专属常量 又是static且为整数类型(integral type,例如int,char,bool),则可特殊处理。只要不取它们 的地址,你可以声明并使用它们而无需提供...
书 名:Effective C++:改善程序技术与设计思维的55个有效做法 作 者:[美]Stanley B. Lippman著 <br> 本书以4个面向来表现C++的本质:procedural(程序性的)、generic(泛型的)、object-based(个别...
Addison Wesley - Symbian OS Explained Effective C++ Programming for Smartphones ... 19 Thin Templates 293 20 Expose a Comprehensive and Comprehensible API 299 20.1 Class Layout 300 20.2 IMPORT_C and ...
23种设计模式的C++实现,每个文件夹对应一个设计模式,为方便学习,大多数project仅有一个实现文件,class均以inline方式实现。 23种设计模式的C++实现,每个文件夹对应一个设计模式,为方便学习,大多数project仅...
条款19:设计class犹如设计type treat class design as type design. 条款20:宁以pass-by-reference-to-const替换pass-by-value prefer pass-by-reference-to-const to pass-by-value. 条款21:必须返回对象时,别...
python数据类dataclass修饰器(csdn)————程序
JS.Class 个人学习笔记: 在ruby中,一个module就是一个简单的对象——它存储一组方法。在JS.Class中,它正是此JS库的核心。。。。。。
核心语法-python--Class语法01(csdn)————程序
b) there is one class consisting of 70 students, the class also contains a c lass president(also student), four class representatives(also student) fo r four courses(Chinese, Math, PE,
(1)系统要实现基本信息录入、修改、查询等功能: ●各种信息的输入,包括顾客基本信息、农产品信息信息、销售信息等。 ●销售信息的处理。 ●各种信息的修改、删除。 ●按照某种条件,查询统计符合条件的各类信息...
C 设计新思维——泛型编程与设计范式之应用 PDF,候捷译序。㆒般人对C templates 的粗略印象,大约停留在「容器(containers)」的制作上。稍有研究由会发现,templates衍生出来的C Generic Programming(泛型编程)技术...
python 怎么调用class中的函数(csdn)————程序
工具使用过程中的问题。 1、反编译后的一些非注释的中文内容(如System.out.println)是UNCODE码,肉眼看不懂 解决方法:settings--decompiler settings,在弹出的界面中把convert unicode strings into ANSI ...
python学习笔记,包含Cython 语法-class 和 cdef class,使用 C++-Typed memoryviews
c++程序设计- c++程序设计-全文共14页,当前为第1页。c++程序设计-全文共14页,当前为第1页。模拟考试题目一: c++程序设计-全文共14页,当前为第1页。 c++程序设计-全文共14页,当前为第1页。 1.定义长方体类cuboid...
1、C++基础学习 友元函数与友元类、引用与指针那些事、深入浅出C++虚函数的vptr与vtable、宏那些事、范围解析运算符那些事、从初级到高级的enum那些事、纯虚函数和抽象类、volatile、virtual、using、union、this、...