您的位置:首页 > 编程语言 > C语言/C++

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: