条款09:绝不在构造和析构过程中调用virtual函数
? ? 首先看下面一段代码,我们将在基类的构造函数中调用虚函数
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
class base{
public:
base(){
fun();
}
virtual void fun(){
cout<<"base class - fun\n";
}
};
class dev: public base{
public:
dev(){
fun();
}
virtual void fun(){
cout<<"dev class - fun\n";
}
};
int main(){
dev d;
return 0;
}
?
编译之后这段程序的输出是:
base class - fun dev class - fun
?
? ? 也就是说,其在我们不知情的情况下,私自调用了基类的fun函数!所以为了保证程序的可靠性,在构造和析构期间不要调用virtual函数,因为这类调用从不下降至派生类
? ?
条款10:令operator=返回一个reference to *this
? ? 之所以有这样的条款,是为了方便我们进行如下的操作
data a,b,c; a = b = c;
? ? ?如果没有返回值,很明显上面的代码会报错。具体的写法如下
class base{
public:
int data;
base& operator=(const base& a){
this->data = a.data;
return *this;
}
};
?
原文:http://bbezxcy.iteye.com/blog/2241466