条款09:绝不在构造和析构函数中调用virtual函数
class Transaction
{
Transaction();
virtual void logTransaction() const=0;
};
Transaction::Transaction()
{
logTransaction();
}
class BuyTransaction:public Transaction
{
public:
virtual void logTransaction() const;
};
class SellTransaction:public Transaction
{
virtual void logTransaction() const;
};
BuyTransaction b;
Transaction 构造函数早于BuyTransaction 但Transaction里面得virtual函数并没有实现,因为BuyTransaction还没有开始初始化,所以base class构造期间virtual 函数绝不会下降到 derived class 阶层。取而代之的是,调用的virtual函数是 base class版本的,。因为base class版本还没实现所以编译不通过。
note: 在构造和析构期间不要调用virtual函数,因为这类调用不会下降至derived class。
阅读(663) | 评论(0) | 转发(0) |