Effective C++ 2

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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值