effective c++ and more第二次阅读之笔记
2010-11-13 13:12
411 查看
2010-11-13
2011-5-23
c++语言禁止为non-const reference 参数产生临时对象。其原因如下:
在产生临时对象,发生隐士性别转换的情况:
举个列子:
一个函数原型:
void uppercasify(string& str);
call in ....:在下列情景中call之
char subtleBookPlug[] = "Effective C++";
uppercasify(subtleBookPlug); //error
程序员原本期望在uppercasify中把subtleBookPlug全部改成大写。但事实并非这样,调用过程中会产生class stirng的 临时对象,又subtleBookPlug为初值。而如果在函数中改写之,是改变的临时对象。
若我们这样定义:
void uppercasify(const string& str);
调用便不会在编译期间出现错误。
2011-6-1
函数接口的继承和函数实现的继承的差异:
1.声明一个纯虚函数的目的是为了让derived class 只继承其接口
2.声明一般(非纯)虚拟函数的目的,是为了让derived classes继承该函数的接口和 缺省行为。
(接口与缺省行为应该分开),这是一般的理念。
通常实现方法:把缺省行为放在接口类的纯虚函数的定义体里面。
在derived class里重写接口函数。
3.声明非虚拟函数的目的是为了另derived classes继承函数的接口及其实现。
2010-6-2
inline virtual function 的辨析
2010-6-9
private inheritance,使用私有继承
1.若classes 之间的继承关系是private,编译器通常不会自动将一个derived class object转换为一个base class object.这与public inheritance的情况正好相反。
2.private base class 继承而来的所有members,在derived class 中都会变成private属性。纵使她们在base class 中原本是protected或public 属性。
意味着“根据某物实现",class D 以private 方式继承B,这么做的原因是,你想采用已经撰写于class B内的某些程序代码,而不是D和B的对象有任何概念关系存在。
private inheritance 与 layering 的意义也是一样,如何取舍?答案是:尽可能使用layering ,必要时才使用private inheritance.
2011-5-23
c++语言禁止为non-const reference 参数产生临时对象。其原因如下:
在产生临时对象,发生隐士性别转换的情况:
举个列子:
一个函数原型:
void uppercasify(string& str);
call in ....:在下列情景中call之
char subtleBookPlug[] = "Effective C++";
uppercasify(subtleBookPlug); //error
程序员原本期望在uppercasify中把subtleBookPlug全部改成大写。但事实并非这样,调用过程中会产生class stirng的 临时对象,又subtleBookPlug为初值。而如果在函数中改写之,是改变的临时对象。
若我们这样定义:
void uppercasify(const string& str);
调用便不会在编译期间出现错误。
2011-6-1
函数接口的继承和函数实现的继承的差异:
1.声明一个纯虚函数的目的是为了让derived class 只继承其接口
2.声明一般(非纯)虚拟函数的目的,是为了让derived classes继承该函数的接口和 缺省行为。
(接口与缺省行为应该分开),这是一般的理念。
通常实现方法:把缺省行为放在接口类的纯虚函数的定义体里面。
在derived class里重写接口函数。
3.声明非虚拟函数的目的是为了另derived classes继承函数的接口及其实现。
2010-6-2
inline virtual function 的辨析
2010-6-9
private inheritance,使用私有继承
1.若classes 之间的继承关系是private,编译器通常不会自动将一个derived class object转换为一个base class object.这与public inheritance的情况正好相反。
2.private base class 继承而来的所有members,在derived class 中都会变成private属性。纵使她们在base class 中原本是protected或public 属性。
意味着“根据某物实现",class D 以private 方式继承B,这么做的原因是,你想采用已经撰写于class B内的某些程序代码,而不是D和B的对象有任何概念关系存在。
private inheritance 与 layering 的意义也是一样,如何取舍?答案是:尽可能使用layering ,必要时才使用private inheritance.
相关文章推荐
- More Effective C++ 阅读笔记(十二)--怎样限制实例化对象的数量
- More Effective C++ 阅读笔记(十三)--要求或禁止在堆中产生对象
- More Effective C++ 阅读笔记
- More Effective C++ 阅读笔记(六)--哪些运算符不能重载
- MoreEffective C++ 阅读笔记(一)---point 和 reference的区别
- (大卫的阅读笔记)More Effective C++ Item 附2:一个auto_ptr的实现实例
- more effective C++阅读笔记
- More Effective C++ 阅读笔记(二) -- C++的新型类型转换(造型Cast)
- More Effective C++ 阅读笔记(三)-- placement new操作符
- More Effective C++ 阅读笔记(四)-- 避免使用隐式类型转换
- More Effective C++ 阅读笔记(五)-- ++与--的前缀、后缀的区别
- More Effective C++ 阅读笔记(六)--哪些运算符不能重载
- More Effective C++ 阅读笔记(七)--防止在析构函数和构造函数中发生资源泄漏
- 侯捷 more effective c++(WQ中文版) 阅读笔记1
- More Effective C++ 阅读笔记(九)--要用引用(reference)捕获异常
- More Effective C++ 阅读笔记(八)--“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异
- More Effective C++ 阅读笔记(十)--效率问题
- More Effective C++ 阅读笔记(十一)--怎样让构造函数和非成员函数虚拟化
- More Effective C++ 学习笔记(3)
- [More Effective C++ 学习笔记]效率