Effective C++ 2

来源:互联网 发布:ubuntu 14.04 镜像源 编辑:程序博客网 时间:2024/05/22 00:54

当自己声明了一个构造函数,则default构造函数将不会自动生成。
C++不允许reference改指向不同对象。
如果想要避免对象赋值,则可将赋值构造函数在private中声明。

 

接下来要讨论的是虚析构函数问题。

class TimeKeeper{
public:
 TimeKeeper();
 ~TimeKeeper();
 ...
};
class AtomicClock:public TimeKeeper{};
class WaterClock: public TimeKeeper{};
class WristWatch:public TimeKeeper{};

TimeKeeper *getTimeKeeper();  //function,返回指向TimeKeepr派生类。

TimeKeeper* ptk=getTimeKeeper();
delete ptk;   //调用~TimeKeeper();从而导致局部删除。
因此引入virtual析构函数。

virtual析构函数使用地点:当此类为基类时。
反之:被当做基类的类要保证析构函数析构正确,即要有virtual析构函数。

 

想要使类变为抽象类,最方便的方法可以是将析构变为pure virtual,并给出定义。

 

 

在构造函数和析构函数中不能调用virtual函数,不会像以上说的那样强。在此时,virtual就是一般函数。

类继承的声明过程,先调用基类构造函数,再派生类构造函数,再析构派生类,最后析构基类。

 

避免代码重复的办法,声明一个private函数init();将共有的代码放入。

 

令赋值操作符函数(成员函数)返回reference-to *this;以后会讲到,非成员函数的赋值函数不可以返回reference

 

下面讲个笑话,如果你自己定义copying函数,则如果你出错,编译器为了报复,不会提醒你错误。

 

 

 

原创粉丝点击