`
kuwoleft
  • 浏览: 1077070 次
文章分类
社区版块
存档分类
最新评论

设计class犹如设计type——effective C++学习笔记

 
阅读更多

<!--[endif]-->设计class犹如设计typeTreat 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的构造函数定义了一个typepass-by-value该如何实现。

<!--[if !supportLists]-->4、 <!--[endif]-->什么是新type的合法值?class的成员变量而言,通常只有某些数值集是有效的。那些数值集决定了你的class必须维护的约束条件,也就觉得了你的成员函数(特别是构造函数,赋值操作符以及所谓的seter函数)必须进行的错误检查。

<!--[if !supportLists]-->5、 <!--[endif]-->你的新的type需要配合某个继承体系吗?如果你继承自某些既有的class,你就受到那些class的设计的束缚,特别是他们的函数是virtualno-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,也可以决定哪些classesfunctionfriends

<!--[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更能达到目的。

分享到:
评论

相关推荐

    Effective C++ 中文版

    条款19:设计class犹如设计type 条款20:宁以pass-by-reference-to-const替换Pass-by-value 条款21:必须返回对象时,别妄想返回其reference 条款22: 将成员变量声明为private 条款23: 宁以non-member、non-...

    More Effective C++

    和其前一本兄弟书籍 Effective C++一样,More Effective C++对每一位以C++为开发工具的程序员而言,都必备读物。  继 Effective C++ 之後,Scott Meyers 於 1996 推出这本「续集」。条款变得比较少,页数倒是多了...

    Effective C++ 3rd Edition 55 Specific Ways to Improve Your Programs and Designs (PDF)

    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++【中文第三版】.rar

    当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机 (Some people say that C++ programmers can be divided into two categories: those ...

    Effective_C++_笔记

    通常C++要求你对所使用的任何东西提供一个定义式,但如果它是个class专属常量 又是static且为整数类型(integral type,例如int,char,bool),则可特殊处理。只要不取它们 的地址,你可以声明并使用它们而无需提供...

    Effective C++

    书 名:Effective C++:改善程序技术与设计思维的55个有效做法 作 者:[美]Stanley B. Lippman著 &lt;br&gt; 本书以4个面向来表现C++的本质:procedural(程序性的)、generic(泛型的)、object-based(个别...

    Symbian OS Explained Effective C++ Programming for Smartphones

    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++实现源码.zip

    23种设计模式的C++实现,每个文件夹对应一个设计模式,为方便学习,大多数project仅有一个实现文件,class均以inline方式实现。 23种设计模式的C++实现,每个文件夹对应一个设计模式,为方便学习,大多数project仅...

    Effective C++(第三版)

    条款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)————程序.pdf

    python数据类dataclass修饰器(csdn)————程序

    JS.Class 学习笔记

    JS.Class 个人学习笔记: 在ruby中,一个module就是一个简单的对象——它存储一组方法。在JS.Class中,它正是此JS库的核心。。。。。。

    核心语法-python--Class语法01(csdn)————程序.pdf

    核心语法-python--Class语法01(csdn)————程序

    学生成绩管理——c++.zip

    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.rar

    C 设计新思维——泛型编程与设计范式之应用 PDF,候捷译序。㆒般人对C templates 的粗略印象,大约停留在「容器(containers)」的制作上。稍有研究由会发现,templates衍生出来的C Generic Programming(泛型编程)技术...

    python 怎么调用class中的函数(csdn)————程序.pdf

    python 怎么调用class中的函数(csdn)————程序

    强大的class类反编译工具——DJ JAVA Decompiler

    工具使用过程中的问题。 1、反编译后的一些非注释的中文内容(如System.out.println)是UNCODE码,肉眼看不懂 解决方法:settings--decompiler settings,在弹出的界面中把convert unicode strings into ANSI ...

    07-python-Cython 语法-class 和 cdef class,使用 C++-Typed memoryviews

    python学习笔记,包含Cython 语法-class 和 cdef class,使用 C++-Typed memoryviews

    c++程序设计-.docx

    c++程序设计- c++程序设计-全文共14页,当前为第1页。c++程序设计-全文共14页,当前为第1页。模拟考试题目一: c++程序设计-全文共14页,当前为第1页。 c++程序设计-全文共14页,当前为第1页。 1.定义长方体类cuboid...

    C++100天经典实战系(含大量案例源码及通俗讲解教程,effective_c++、STL、综合能力全面提升)

    1、C++基础学习 友元函数与友元类、引用与指针那些事、深入浅出C++虚函数的vptr与vtable、宏那些事、范围解析运算符那些事、从初级到高级的enum那些事、纯虚函数和抽象类、volatile、virtual、using、union、this、...

Global site tag (gtag.js) - Google Analytics