`
暴风雪
  • 浏览: 377608 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

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

    博客分类:
  • C艹
 
阅读更多

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

 

1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics