正文

回到頂部

1.關于構造函數(shù)的一個違反直覺的行為

我會以重復標題開始:你不應該在構造或者析構的過程中調用虛函數(shù),因為這些調用的結果會和你想的不一樣。如果你同時是一個java或者c#程序員,那么請著重注意這個條款,因為這是c++同它們不一樣的地方。

假設你已經(jīng)有一個為股票交易建模的類繼承體系,它可以買賣股票等。這些交易的可審計性很重要,所以每次交易對象被創(chuàng)建的時候,需要在審計日志中創(chuàng)建一個合適的記錄。這看上去是解決問題的合理方法:

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

 1 class Transaction { // base class for all 2  3 public: // transactions 4  5 Transaction(); 6  7 virtual void logTransaction() const = 0; // make type-dependent 8  9 // log entry10 11 ...12 13 };14 15 Transaction::Transaction() // implementation of16 17 { // base class ctor18 19 ...20 21 logTransaction(); // as final action, log this22 23 } // transaction24 25 class BuyTransaction: public Transaction { // derived class26 27