正文

回到頂部

1.關(guān)于構(gòu)造函數(shù)的一個違反直覺的行為

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

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

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

 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