15.8.1 指標型控制代碼
class base
;class child: public base
};class basemanager
basemanager(const basemanager &i):p(i.p),use(i.use)
basemanager(const base &i);
~basemanager()
const basemanager &operator=(const basemanager&);
const base *operator->() const
const base &operator*() const
private:
base *p;
size_t *use;
void decr_use()
}};const basemanager &basemanager::operator=(const basemanager &i)
15.8.2 複製未知型別
控制代碼類經常需要在不知道物件的確切型別時分配已知物件的新副本。
解決這個問題的通用方法是定義虛操作進行複製,我們稱將該操作命名為clone。
如果虛函式的基類例項返回類型別的引用或指標,則該虛函式的派生類例項可以返回基類例項返回的型別的派生類(或者是類型別的指標或引用)。
class base
;class child: public base
child *clone() const
};
定義控制代碼建構函式
basemanager::basemanager(const base &i):p(i.clone()),use(new size_t(1)){}
第15章 物件導向程式設計
派生類中的虛函式可以返回基類函式所返回型別的派生類的引用或指標。只有指定為虛函式的成員函式才能進行動態繫結。派生類可以進一步限制但不能放鬆對所繼承的成員的訪問。使用private或protected派生的類不繼承基類的介面,稱為實現繼承。使用class保留字定義的派生類預設具有private繼承,而...
第 15章 物件導向程式設計(一)
以quote基類和bulk quote派生類為例,記錄標頭檔案和cpp檔案的構成。目錄 基類和派生類的標頭檔案及cpp檔案結構 quote.h quote.cpp bulk quote.h bulk quote.cpp main.cpp ifndef quote h define quote h i...
第15章 物件導向程式設計 3
15.2.4 virtual與其他成員函式 c 中的函式呼叫預設不使用動態繫結。要出動動態繫結,必須滿足兩個條件 第一,只有指定為虛函式的成員函式才能進行動態繫結,成員函式預設為非虛函式,非虛函式不進行動態繫結 第二,必須通過基類型別的引用或指標進行函式呼叫。1.從派生類到基類的轉換 因為每個派生類...