題目:用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 設計乙個不能被繼承的類 不能被繼承?不能被繼承?不能被繼承?按照繼承的理論知識分析,我們只要把...