当自己声明了一个构造函数,则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函数,则如果你出错,编译器为了报复,不会提醒你错误。