<!--[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**:传递大对象或不可变对象时,传引用更高效,且不会...
通过这些学习笔记,我们可以了解到《Effective C++》不仅为我们提供了C++编程中的一些基本和高级技巧,也教会我们如何遵循最佳实践,编写出更加高效、健壮的C++代码。学习这些知识点,对于提高C++编程能力和解决实际...
### C++学习的50条黄金定律解析 #### 1. C++学习初期与C语言的关系 - **解析**:C++是基于C语言发展而来的,因此掌握C语言的基础对于学习C++非常有帮助。这并不意味着必须精通C语言才能学好C++,而是说C语言的一些...
根据给定的信息,“前辈的C++50个建议”提供了关于如何有效学习和掌握C++语言的指导思想和实用建议。下面将详细解释这些建议,并深入探讨它们背后的原理和重要性。 ### 1. C++的学习应当从C语言入手 C++是一种基于...
- 《Effective C++》、《More Effective C++》和《Exceptional C++》是C++学习者不可错过的书籍。 - **建议**:深入研读这些书籍,掌握C++的高级用法。 #### 24. 学习路线图 - 学习C++需要一个清晰的学习路线图。 -...
- **解释**:这本书是C++学习的经典教材之一,能够帮助读者建立面向对象的思维方式,深入理解C++的核心概念。 - **建议**:利用这本书来系统地学习C++的基础知识,并通过书中提供的大量实例来练习和巩固所学内容。 ...