第五十九屆冠軍(使用C 設計乙個類不能被繼承)

2021-09-09 01:30:00 字數 647 閱讀 9020

稱號:使用c++設計乙個類不能被繼承。

分析:這是adobe 公司2007 的筆試題最新校園招聘。

應聘者的c++基本功底外,還能考察反應能力,是一道非常好的題目。

分析:c++中父類的建構函式會呼叫子類的建構函式,從這一點出發, 我們能夠將子類的建構函式許可權設為私有,這樣父類建構函式在呼叫子類建構函式時就會出錯。可是這樣做有乙個***。私有的建構函式使得我們無法正常創造這個類的物件。儘管能夠通過像單例模式中那樣通過提供乙個靜態函式呼叫私有建構函式產生乙個類物件並返回其指標或者引用,但這樣僅僅能產生堆上的物件而無法在棧上產生類的區域性物件。

這裡採用這樣一種實現方法:

使用乙個具有私有建構函式的模板類finalclassbase,finalclass虛繼承於該類,而且為該類的友元,因此finalclass有許可權呼叫基類的建構函式。這裡finalclass虛繼承於finalclassbase。所以以後全部試圖繼承finalclass的派生類。必須在他們的建構函式裡直接呼叫虛基類finalclassbase的建構函式,此時就會由於沒有對應的訪問許可權而出錯(圖中提示不可訪問)。從而限制了finalclass為乙個不能被繼承的類,滿足了題目的要求。

乙個友元類使用誤區(C )

這個問題,我困擾了好一會,決定記錄一下。問題 簡化如下 class b class a 編譯出錯提示資訊 bool a operator int,int is private 你知道問題出現在 嗎?如果你看出來了,那麼恭喜你,我是花了挺長時間糾結的。我的理解是這樣的。類a有乙個刪除的預設建構函式,類...

C 設計乙個類不能偷懶的地方

1 建構函式 預設建構函式 關於怎樣去初始化乙個物件的問題,也就是乙個新的資料型別怎樣去填充它的內容,需要考慮是否需要是explicit還是implicit強調,一般建議explicit來強調,因為存在隱式型別轉換總是讓人不太放心。需要考慮的細節很多,有預設引數的值設計,資料成員初始化列表等等。例項...

C 用雜湊表設計乙個集合類

集合的主要操作包括 並集 交集 判斷是否為子集 取差異集合。c 中沒有提供集合資料型別或集合資料結構,用雜湊表作為基本資料儲存是設計集合型別的比較有效的方式。其中,設計的乙個關鍵就就,要先創造乙個臨時儲存資料的例項,在本 中,用命名為 temp。public class cset public vo...