<<Effective c++>>读书笔记---条款19:设计class犹如设计type

  想要设计出高效的classes首先你必须了解你面对的问题。几乎每一个class都要求你面对一下提问,而你的回答往往导致你的设计规范:

  • 新type的对象应该如何被创建和销毁?

   构造函数、析构函数应该怎么写

  • 对象的初始化和对象的赋值该有什么样的差别?

    对象的赋值要注意资源的拷贝,初始化直接调用构造函数,而赋值会调用拷贝构造函数或赋值操作符=

  • 新type的对象如果被passed by value(以值传递),意味着什么?

    调用了拷贝构造函数,注意深拷贝和浅拷贝

  • 什么是type的"合法值"?

  

  • 你的新type需要配合某个继承图系(inheritance graph)吗?

    多态,如果继承自现有的classes,你就受到那些classess的设计的束缚,特别是受到“它们的函数是virtual或non-virtual”的影响。如果其他类继承自你的class,那么你所声明的函数--尤其是析构函数--是否为virtual

  • 你的新type需要什么样的转换?

    显式和隐式类型转换

  • 声明样的操作符和函数对此type而言是合理的?

    这决定这我们需要声明那些函数

  • 什么样的标准函数应该驳回?

    那些正是你必须声明为private者

  • 谁该取用新type的成员?

    这个提问可以帮助你决定哪个成员为public,哪个为protected,哪个为private。它也帮助你决定哪一个classes和/或function应该是你的friends,以及将它们嵌套于另一个之内是否合理

  • 什么是新type的"未声明接口"(undecleared interface)?

  

  • 你的新type有多么一般化?

    是否要定义这个类,而是创建class template

时间: 2024-10-23 09:00:42

<<Effective c++>>读书笔记---条款19:设计class犹如设计type的相关文章

Effective C++读书笔记(条款18-23)

(四).设计与声明 ____________________________________________________________________________________________________________________________________ 条款18:让接口容易被使用,而不容易被误用 #1.导入新类型可以让接口不易被误用,以函数替换对象则可以保证类型安全性. 例如: class Date{ public: Date(int month, int day

effective C++ 读书笔记 条款06

条款06:若不想使用编译器自动生成的函数,就该明确拒绝: 直接看代码与注释: #include <iostream> using namespace std; class Test { public: Test() { } ~Test() { } /* void TT() { Test t1; Test t2(t1); } */ private: Test(const Test& test); Test& operator = (const Test& test); }

Effective C++读书笔记(条款24-29)

Effective C++第四篇,扩展的有点多... (四).设计与声明 ____________________________________________________________________________________________________________________________________ 条款24:若所有参数皆需类型转换,请为此采用non-member函数 #1.如果你需要为某个函数的所有参数(包括被 this指针所指的那个隐喻参数)进行 类型转

effective C++ 读书笔记 条款08

条款08  别让异常逃离析构函数: 假设在析构函数其中发生了异常,程序可能会过早结束或者导致不明白行为(异常从析构函数传播出去) 看代码: #include <iostream> using namespace std; class DBConnection { public: void close() { int i = 3; int j = 0; int k = i/j; printf("%d\n",k); } }; class DBConn { public: DBC

effective C++ 读书笔记 条款12与条款13

条款12:确定你的public继承塑膜出is-a关系: 这个条款主要将了一些特殊情况:比如企鹅是鸟,企鹅可以继承于鸟,但是鸟会飞,企鹅却不能飞:还有让正方形继承矩形可能也会造成这种尴尬! 这个问题以前想过,但是不知道怎么解决,如果现实生活当中确实要这么使用:比如 猫 狗 鱼  猪等等许多动物继承Animal类,但是猫狗等不会游泳, 假如这里是有很多动物,不能采用鱼里面专门加一个方法!  这个现在还没想出来,条款12也没有讲如果要这么用该怎么处理就是将要避免这样. is - a; 在面向对象程序设

Effective C++读书笔记(条款1-10)

不得不说,Effective C++确实是一本C++进阶的好书,刚浏览完第二遍, 现对其做一个大体性的总结 ,并进行适当的展开,作为以后C++参考复习之用. (一).让自己习惯C++ ____________________________________________________________________________________________________________________________________ 条款1:视C++为一个语言联邦 #1.将C++ 分

Effective C++读书笔记(条款35-40)

(六).继承与面向对象设计 ____________________________________________________________________________________________________________________________________ 条款35:考虑virtual函数以外的其他选择 #1.virual函数的四个替代方案: (1).使用non-virtual interface(NVI)手法,那是 Template Method 设计模式

Effective C++读书笔记(条款30-34)

(五).实现 ____________________________________________________________________________________________________________________________________ 条款30:透彻了解inlining 的里里外外 #1.inline是将"对此函数的每一个调用"都以函数本体来替换之,所以inline函数 应保证函数本体的短小,这样,既可以导致较小的目标码,又可以导致较高的指令

effective C++ 读书笔记 条款20

条款20:宁以 pass-by-reference-to-const 替换 pass -by -value 1:采用后者效率高:看代码: #include <iostream> using namespace std; class Person { public: Person() { cout<<"Person()"<<endl; } Person(const Person& p) { cout<<"Person(co