Effective C++读书笔记(5)
来源:互联网 发布:用友软件现金流量表 编辑:程序博客网 时间:2024/05/08 05:36
(1)条款19提到:设计class如设计type
(2)尽量以pass-by-reference-to-const替换pass-by-value。前者通常比较高效,并且可以避免切割问题
切割问题:如果一个子类被pass-by-value到一个父类身上,那么在调用父类方法的时候,实际上使用的是父类实现而不是子类
对编译器来说,传值给一个父类,相当于:声明父类,将子类作为拷贝构造函数的参数传给父类,所以对系统来说这里只有父类,不存在子类,就更加不可能调用子类的方法。而const A& a 传入则可以避免这个问题。而const也可以保证子类在函数中不被修改。
以上规则不适用与内置类型,以为STL的迭代器和函数对象,对它们而言,传值比较妥当
(3)绝对不要返回一个指向local stack的pointer或者reference,也不要返回一个指向local static对象的指针或者引用
(4)要尽量将成员变量声明为private,只有这样才能提供良好的延伸性
(5)protected不比public具有更好的封装性
(6)宁可拿non-member non-firend函数替换member函数,这样可以增加封装性,包裹弹性,机能扩充性
为了更好的组织,non-member non-firend函数可以与类声明位于相同的namespace内,
namespace可以跨文件,可以将“浏览器类”放入一个头文件,之后“书签相关处理函数”放入一个头文件,“历史处理”放入一个,所有的都使用同一个命名空间,这样如果用户只想要浏览网页和管理书签,而对历史处理不感兴趣的话,那么就可以只#include“浏览器类头文件”和“书签相关类头文件”
这样有利于更好的组织
(7)如果所有参数都需要转换,可以采用non-member函数(条款24)
例子:在Rational类的同一个namespace中生命该non-member函数
const Rational opreator* (const Rational& lhs, (const Rational& rhs)
{
return Rational(........)
}
这与编译器的调用机制有关 0 0
- <Effective C++>读书笔记-5
- <<Effective C++>>读书笔记5: 实现
- <<More Effective C++>>读书笔记5: 技巧(1)
- <<More Effective C++>>读书笔记5: 技巧(2)
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- 《Effective c++》读书笔记
- 《more effective c++》读书笔记
- <<effective c++>> 读书笔记
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- Effective C++(1)读书笔记
- Effective C++(2)读书笔记
- 《Effective C++》读书笔记
- 《Effective C++》读书笔记
- 《effective c++》读书笔记【一】
- 《effective c++》读书笔记1
- 《effective c++》读书笔记2
- <application>
- java中break以及continue
- java中的网络通信编程之UDP篇
- NFC术语
- C#:USB设备枚举(五)生成TreeView数据源
- Effective C++读书笔记(5)
- yii上传图片、yii上传文件、yii控件activeFileField使用
- inittab 详解
- 上海交大2008机试
- 查找练习 hash——出现过的数字
- C#:USB设备枚举(六)生成ListView数据源
- 为Web应用建立JMX管理系统(一)
- matlab函数的集锦
- CF 231div2 B. Very Beautiful Number