问题: class Transaction{ public: Transaction(){ ... logTransaction(); //记录此笔交易 } virtual void logTransaction()const=0; ... }; class BuyTransaction:public Transaction{ public: virtual void logTransaction()const; ... }; class SellTransaction:public Transaction{ public: virtual void logTransaction()const; ... }; 原因:在构造析构期间不要调用virtual函数,这时的virtual函数已失去意思。 解决: class Transaction{ public: explicit Transaction(const std::string& logInfo){ ... logTransaction(logInfo); } void logTransaction(const std::string& logInfo)const{ } }; class BuyTransaction:public Transaction{ public: BuyTransaction(Parameters):Transaction(createLogString(Parameters)){ } private: static std::string createLogString(Parameters)const; }; 注意createLogString函数应被定义为STATIC。