首页 > 其他 > 详细

《Effective C艹》读书笔记(6)

时间:2015-09-08 02:03:27      阅读:240      评论:0      收藏:0      [点我收藏+]

条款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;
    }
};

?

《Effective C艹》读书笔记(6)

原文:http://bbezxcy.iteye.com/blog/2241466

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!