标签:
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