class Transaction {
public:
Transaction();
virtual void logTransaction() const = 0;
...
};
Transaction::Transaction() {
logTransaction();
}
class BuyTransaction : public Transaction {
public:
virtual void logTransaction() const;
};
class SellTransaction : public Transaction {
public:
virtual void logTransaction() const;
}; 现在,当以下这行被执行,会发生什么事:BuyTransaction b;无疑地有一个BuyTransaction构造函数被调用,但首先Transaction构造函数一定会更早地被调用.derived class 对象内的base class 成分会在derived class 自身成分在构造之前先构造,Transaction构造函数的最后一行调用 virtual 函数logTransaction,这正是引发惊奇的起点.这时候被调用的logTransaction是Transaction内的版本,不是BuyTransaction内的版本,即使目前即将建立的对象类型是BuyTransaction.base class 构造期间 virtual 函数绝不会下降到derived class 阶层.非正式的说话比较传神:在base class 构造期间,virtual 函数不是 virtual 函数.
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/yiranant/article/details/48048523