Effective cpp 读书笔记5
来源:互联网 发布:hash算法详解 编辑:程序博客网 时间:2024/06/04 16:14
设计与声明(下)
22.将成员变量声明为private
切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允诺约束条件或的保证,并提供class作者以充分的实现弹性
protected并不比public更具封装性
- 某些东西的封装性与“当其内容改变时可能造成的代码破坏量”成反比
- public和protected其实差不多,当成员变量是两者之一时,取消该变量,都会导致大量代码的破坏
- 从封装的角度看,其实只有两种访问权限:private和public
23.宁以non-member、non-friend替换member函数
这样做可以增加封装性、包裹弹性和技能扩充性
- 封装的意义:越少代码可以访问它,越多数据可被封装,也就越能自由地改变数据
- 衡量封装程度:计算能够访问该数据的函数数量,作为一种粗糙的测量。越多函数可以访问它,封装性越低
- 能访问private数据的,只有member函数、friend函数,因此为了提高封装性,采用non-member、non-friend函数
- 一般实现的时候,将相关的non-member函数放在和class相同的namespace里面。将功能相似的类放在多个头文件,同一个namespace里面,从而允许客户只对它们所用的那一小部分系统形成编译依赖
24.若所有参数皆需类型转换,请为此采用non-member函数
目的是为了保证函数一致性。典型例子是重载类的运算符operator*,如果是member函数,则运算符不支持交换律,影响使用。
从封装的角度看,friend和member函数一样,无论何时,如果可以避免使用friend函数就应该避免
25.考虑写出一个不抛出异常的swap函数
当std::swap对你的类型效率不高,则提供一个swap函数,并确定它不抛出异常
如果你提供一个member swap,也该提供一个non-member swap来调用前者。对于自定义的class,需要特化std::swap
调用swap应该针对std::swap使用using声明,然后调用swap并且不带任何命名空间资格修饰
为用户定义类型进行std Template全特化是好的,但不要在std中加入新东西
- swap是异常安全性编程的脊柱
- 标准库的swap只是简单的调用了复制构造函数、赋值函数;对于资源型的情况存在问题
- 全特化是指对模板的所有参数都特化,偏特化是对模板的部分参数特化
- C++只允许对class Template偏特化,在function tempate身上不允许偏特化
- 重载function template可行,但是std是一个特殊的命名空间,客户可以全特化std内的模板,但不能添加新的Template到std。因此重载swap函数需要在自己的命名空间内(解释最后一条)
- C++编译器对于同名的模板函数的查找顺序:编译时确定调用的模版的实参类型T,如果对应命名空间有模板专属的函数,则使用对应的;没有的话,看函数内是否有声明其他命名空间中的对应(模板)函数,有则调用(解释using声明)- 一般而言,吞掉异常不好,它压制了某些动作失败的重要信息
0 0
- Effective cpp 读书笔记5
- Effective cpp 读书笔记1
- Effective cpp 读书笔记2
- Effective cpp 读书笔记3
- Effective cpp 读书笔记4
- Effective cpp 读书笔记6
- Effective cpp 读书笔记7
- Effective cpp 读书笔记8
- Effective cpp 读书笔记9
- Effective cpp 读书笔记10
- effective cpp 读书笔记2
- Effective STL 读书笔记 5
- Effective C++读书笔记5
- Effective C++ 读书笔记(5)
- Effective C++读书笔记(5)
- Effective C++读书笔记(5)
- <Effective C++>读书笔记-5
- Effective C++读书笔记(5)
- Python执行系统命令的方法 os.system(),os.popen(),commands
- 2016 - PayPal商家集成常见技术问题 - 官方整理
- 按钮点击多次出现多个相同页面问题
- 深入JVM虚拟机(四) Java GC收集器
- Mysql系列(九) 单引号与反引号
- Effective cpp 读书笔记5
- kickstart文件的密文生成
- Java反射
- 安卓常用开源库
- 操作格子【线段树】
- 灰帽子Python 学习记录 8 内存断点
- 第十七章 Autorotation, Popover Controllers, and Modal View Controllers翻译
- java的String和StringBuilder类的替换方法的运用。
- 代码覆盖率工具---Emma