天天看點

面試常問-----------如何實作一個不能被繼承的類

一個類不能被繼承,就是說它的子類不能構造出父類對象(由于繼承就是要達到複用的效果),那麼這個子類就無法執行個體化整個子類,就可以了解成無法繼承父類。

方案1:

首先由于我們知道子類繼承父類時,通路屬性就會改變,private修飾的成員被繼承後在子類是不可見的,而子類的構造函數是由子類父類合成而來的,如此就沒有辦法建立對象,是以我們可以将父類的構造函數聲明成私有的,這樣一來,這個類的構造函數在子類中是不可見的,那麼這個類就不能被繼承了。

但是由于将這個類構造函數定義成了私有,那在類外他自己都沒有辦法構造對象,是以

方案2:

改進方案就是定義一個static的函數,函數的作用就是作為一個接口,傳回一個建立的對象可以被類外看到,幫助構造類的執行個體,還有一種方案就是将這個函數定義成友元函數,友元關系也不可以被繼承。

方案3:由于設定static或者友元,類就不能像普通的類一樣;是以我們就要用到虛繼承了。

讓父類虛繼承一個G類,那麼根據虛繼承的特性,虛基類的構造函數由最終子類負責構造,是以B類想要繼承A類,就要能構造出G類,這是沒辦法實作的,是以就實作了一個不能被繼承的類。