【Effective C++】Part4 设计与声明

条款18:让接口容易被正确使用,不易被误用

  1. 好的接口容易被正确使用,不易被误用
  2. 促进正确使用的方法包括有接口的一致性,以及与内置类型的行为兼容
  3. 阻止误用的方法包括有: 建立新的类型,限制类型上的操作,束缚对象的值,以及消除客户的资源管理责任。
  4. shared_ptr支持自定义删除器,这可以防范DLL问题。

条款19:设计class犹如设计type

要设计一个良好的class,需要思考以下问题:

  1. 新types对象应该如何被创建和销毁?

    涉及到构造函数,析构函数,内存分配和释放函数(operator new,operator new[],operator delete,operator delete[])的设计

  2. 对象的初始化和对象的赋值该有怎样的差别?

    涉及到构造函数和赋值操作符的行为以及它们的差异

  3. 新type的对象如果如果被pass-by-value(以值传递),意味着什么?

  4. 什么是type的合法值?

    对于class的成员变量而言,可能只有某些数据集是有效的,此时某些成员函数(特别是构造函数,赋值操作符和”setter”函数)必须进行的错误和检查工作,它也影响函数抛出的异 常,以及(极少使用的)函数异常明细列.

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

    如果设计的type继承自某些类,就会收到哪些类的”函数是virtual或non-virtual”的影响;

    根据是否设计的type是否被继承,判断所声明的函数(尤其是析构函数)是否为虚.

  6. 你的新types需要什么样的转换?

    如果需要隐式转换,可以重载类型转换函数或允许non-explict-one-arguement(非explict单实参)构造函数.如果只允许显示转换,就专门写出负责执行转换的函数,且禁止类型 转换操作符和non-explict-one-arguement(非explict单实参)构造函数

  7. 什么样的操作符和函数对此新type而言是合理的?

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

    声明为private或只声明不定义.(具体见条款6)

  9. 谁该取用新type的成员?

    决定哪些成员为public,哪些为protect,哪些为private,那些类和函数是friends,以及将它们嵌套于另一个之内是否合理.

  10. 什么是新type的未声明接口?

    明确它对效率,异常安全性(见条款29),以及资源运用(例如多任务锁定和动态内存)提供何种保证.

  11. 你的新type有多么一般化?

    判断是否直接定义一个新的class template.

  12. 你真的需要一个新type吗?

    如果只是为已有类添加新功能,说不定单纯定义一个或多个non-member函数或template即可。

【Effection C++】读书笔记 条款18~条款19相关推荐

  1. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  2. 读书笔记-人月神话19

    有多少书,我读过:有多少事,我做过:记录下学习的点点滴滴,每一天. 回顾一下经典,记录一下悟点. 读书笔记-人月神话 - 再论"没有银弹"

  3. 读书笔记_Effective_C++_条款七:为多态基类声明virtual析构函数

    严格来说,多态分为编译时多态和运行时多态,编译时多态是函数的重载,而运行时多态则是迟绑定技术,即根据基类指针或引用的实际指向来决定采取何种行动,一般来说,多态特指运行时多态.下面我们来举有关C++多态 ...

  4. 读书笔记_Effective_C++_条款三十一:将文件间的编译依存关系降至最低(第二部分)...

    下面再来看书,去理解书上说的Handler classes就简单多了,我们大概过一下. 假设我们要写一个Person类,如下: 1 class Person 2 { 3 private: 4 stri ...

  5. 读书笔记_Effective_C++_条款十九:设计class犹如设计type

    这里初看到"class"和"type",感觉他们是说的是同一样东西,但仔细读了一下,两者在文中还是有区别的.class侧重于自定义的类,而type侧重于系统预定 ...

  6. 读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数...

    class A { private:int a; public:A(int x) :a(x){}A operator*(const A& x){return A(a*x.a);} };int ...

  7. Python Crash Course读书笔记 - 第18章:GETTING STARTED WITH DJANGO

    Django是一个web框架.可用来构建交互式网站. 设置项目 首先需要写项目说明书(spec). 然后需要创建虚拟环境(virtual environment). 虚拟环境是一个隔离的环境,可以单独 ...

  8. 《TCP/IP具体解释》读书笔记(18章)-TCP连接的建立与中止

    TCP是一个面向连接的协议.不管哪一方向还有一方发送数据之前.都必须在两方之间建立一条连接.这样的两端间连接的建立与无连接协议UDP不同.UDP向还有一端发送数据报时,无需不论什么预告的握手. 1.建 ...

  9. CSharp设计模式读书笔记(18):中介者模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)...

    中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互,中介者模式又称为 ...

  10. 《TCP/IP详解》读书笔记(18章)-TCP连接的建立与中止

    TCP是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须在双方之间建立一条连接.这种两端间连接的建立与无连接协议UDP不同,UDP向另一端发送数据报时,无需任何预告的握手. 1.建立连接的协 ...

最新文章

  1. windows消息队列。DispatchMessage。 PostMessage
  2. 浅析高端网站建设策划方案都包括哪些内容?
  3. 【技术备忘录】H3C、华为网络设备Telnet的基本配置
  4. 兴业银行与第四范式开启AI平台加速模式 毫秒级信用卡反欺诈系统上线
  5. jmete 学习--基础之名词解释
  6. Github 2019 年最值得关注的数据科学项目 Virgilio(维吉尔) 中文版
  7. [转]将H264与AAC打包Ipad可播放的TS流的总结
  8. Java怎么安装 详细教程来了 附带安装包
  9. linux怎么取消光盘,怎样取消ubuntu官方光盘
  10. java 继承抽象类_java基础之继承,抽象类
  11. 使用文本编辑器来写Python代码
  12. win10关机后cpu风扇还在转_win10关机风扇一直转 指示灯亮怎么办_win10关机风扇还转指示灯亮的解决方法...
  13. 高通IPQ5018 IPQ6010 刷机步骤
  14. 1236: 数的逆转
  15. 云数据库RDS规格族配置详解
  16. 科学计算基础软件包NumPy入门讲座(5):常用函数
  17. 老牛知点所以然-Linux(Ubuntu)配置安卓开发环境及过程中常见问题解决
  18. git rebase的两种用法(最全)
  19. 阿里云MaxCompute携手华大基因打造精准医疗应用云平台
  20. 文章本天成|跟我一起来一场简洁易懂的servlet的过滤器Filter的学习吧

热门文章

  1. 2.9 维数与秩(第二章 矩阵代数)
  2. oracle 数据库truncate,详解Oracle DELETE和TRUNCATE 的区别
  3. C++typename详解
  4. python模糊匹配忽略大小写_正则表达式忽略大小写匹配,但保留特定大小写的结果...
  5. 视频播放 - 1001错误
  6. 十五、基于FPGA的图像处理算法之放大(一)
  7. 【计算机网络 1.网络报文的传递 MAC与IP地址的用处】
  8. iMeta | 成都中医药大学张杨组开发抗新冠中医药及其机制与疗效数据库
  9. PowerMill二次开发资料集-Powermill常用宏命令预览表
  10. 本作包括有宏大的5个章节