Effective C++ 第三十四條 Differentiate between inheritance of interfa

區(qū)分接口繼承和實(shí)現(xiàn)繼承
C++ ?derived 繼承 base,對于接口和實(shí)現(xiàn)的選擇也有幾種方式
繼承接口不繼承實(shí)現(xiàn)
繼承接口外加一份缺省的代碼實(shí)現(xiàn),可以重寫
繼承接口和實(shí)現(xiàn),不重寫
下面為這三種情況詳細(xì)介紹該如何做
1.繼承接口不繼承實(shí)現(xiàn)
base 中的函數(shù)采用 pure virtual ,這樣就可以讓 derived 不得不為其寫一份實(shí)現(xiàn)
2.繼承接口外加一份缺省實(shí)現(xiàn),可以重寫
采用 impure virtual 實(shí)現(xiàn)
如果需要重寫就在 derived 中重新實(shí)現(xiàn)一遍 fun,如果不需要?jiǎng)t什么都不需要寫。
3.繼承接口和實(shí)現(xiàn),且不需要重寫
采用 non-virtual 來實(shí)現(xiàn)
總結(jié):
接口繼承和實(shí)現(xiàn)繼承不同。在 public 繼承之下,derived classes 總是繼承 base class 的接口。
pure virtual 函數(shù)只具體指定繼承接口。
impure virtual 函數(shù)具體指定接口繼承以及缺省實(shí)現(xiàn)繼承。
non-virtual 函數(shù)具體指定接口繼承以及強(qiáng)制性實(shí)現(xiàn)繼承。
標(biāo)簽: