C 實現乙個不能被繼承的類

2021-08-25 22:12:08 字數 1275 閱讀 6546

題目:用c++設計乙個不能被繼承的類

1、不能被繼承?按照繼承的理論,只要把類的建構函式設為私有,即可解決問題。

此時子類就沒有辦法訪問基類的建構函式,從而就阻止了進行子類構造物件的任務實現,也就達到了不可繼承的目的。

問題:如何產生這個類的例項物件和釋放物件呢?

2、顯然定義靜態方法,在方法內部實現乙個物件,然後返回它的指標。

ok?那怎麼釋放掉呢?再照樣設計乙個釋放記憶體函式,問題就會迎刃而解。

ok。按照這個邏輯分析。示例**如下:

#includeusing  namespace std;

class a

static void destruct(a * pintance)

private:

a(){}

~a(){}

public:

int num;

};void main()

好了,這個類就這樣子。按照理論分析,我們的實踐結果也是完全成立的。

但是他有兩個缺點:

1)該類的例項只能在堆上建立。(相當於是程式設計師自己建立的而不是系統建立的)

2)與我們常見的類的構造和析構不同。

3、接下來繼續完善之。思路如下:

base構造/析構函式均私有+finalclass類宣告為base的友元類+finalclass虛繼承自base

#includeusing namespace std;

template class base

~base() {}

};class finalclass : virtual public base

~finalclass() {}

};class testclass : public finalclass

;void main()

分析:

(1)finalclass類繼承於base類,base為虛基類,因為它是base的友元,所以,它可以訪問基類的私有建構函式,以及析構函式。也就是說,可以建立堆上的物件,並且可以構建棧上的物件。

(2)可否繼承?假如它作為乙個基類被另乙個類繼承,編譯時是完全可以通過的。這一點沒有什麼疑問。

但問題就在需要構建物件時:當派生類testclass在構造物件時,因為是虛繼承,所以派生類testclass的建構函式會直接去呼叫base基類的建構函式,而base的建構函式是私有的。編譯錯誤!

這就是乙個真正不能被繼承的類。

C 實現乙個不能被繼承的類

要設計乙個不能被繼承的類,考慮c 11的新特性的話,有三種方法 1 就是將該類的建構函式和析構函式設為private 或者僅僅將析構函式設為private 這樣派生類無法呼叫基類的建構函式和析構函式,從而不能繼承。要建立物件,可以在該類中設乙個static成員函式,提供返回乙個該類物件指標,這種方法...

實現乙個不能被繼承的類

分析 普通類都能被繼承,但當這個類的建構函式被宣告為私有時,這個類便不能被繼承,同時也不能在類外面定義該型別的物件,該怎麼解決這個問題呢?方法一 類物件的構造是通過建構函式實現的,如果將建構函式宣告為私有或者保護型別,那麼在類外是不能呼叫建構函式的,也就不能在類定義出物件。對此,我們可以在類裡定義乙...

用C 實現乙個不能被繼承的類

一道筆試題的思考 記得,找工作時,遇到了這樣的一道筆試題。記不清是那個公司的筆試題,反正覺得自己當時還真費了一點功夫的,但是也就搞定了一部分,結果還是被另一部分給鄙視啦!現在靜下來分析實現如下 題目 用c 設計乙個不能被繼承的類 不能被繼承?不能被繼承?不能被繼承?按照繼承的理論知識分析,我們只要把...