Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43931
  • 博文数量: 25
  • 博客积分: 930
  • 博客等级: 准尉
  • 技术积分: 257
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-25 08:59
文章分类

全部博文(25)

文章存档

2010年(6)

2009年(18)

2008年(1)

我的朋友
最近访客

分类: C/C++

2009-04-21 09:36:34

条款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。
 
阅读(631) | 评论(0) | 转发(0) |
0

上一篇:Effective C++ 7.1

下一篇:Effective C++ 10.1

给主人留下些什么吧!~~