下面的**將會禁止繼承:
class a;
class lock
};class a : virtual public lock
a(int t)
{}現在,如果你嘗試從類a派生其它類將會得到類似下面這樣的編譯錯誤。
class b : public a
{}; // lock::lock' : cannot access private member declared in class 'lock'
這是因為派生類都需要呼叫虛基類的建構函式,因此從a派生的b需要呼叫虛基類的建構函式(也就是lock
的建構函式),而lock的建構函式是私有的,類b又不是lock的友元,所以這將會產生乙個編譯錯誤。
如果我們移除類a派生時的virtual關鍵字,程式將會成功編譯。這是因為在非虛擬繼承中,任何類都可以
呼叫直接父類中的建構函式。因此,在非虛擬繼承中,b將呼叫它的直接父類a的建構函式而a將呼叫它的直接父
類lock的建構函式,這都是合法的。
在C 中禁止類繼承
下面的 將會禁止繼承 class a class lock class a virtual public lock a int t 現在,如果你嘗試從類a派生其它類將會得到類似下面這樣的編譯錯誤。class b public a lock lock cannot access private mem...
C 中禁止類被派生的方法
在我的那篇 c 中虛析構函式的作用 中我說明了為什麼作為基類的類的析構函式必須是虛函式,同時也指出 為了避免產生虛函式表,如果類不是基類的話,析構函式就不需要宣告為虛函式。但是,我們不能預料使用者的行為,你不敢肯定使用者是否會從你的類去派生自己的類。如果使用者以乙個基類指標去刪除乙個派生類的物件,就...
C 中禁止類被派生的方法
我的那篇 c 中虛析構函式的作用 中我說明了為什麼作為基類的類的析構函式必須是虛函式,同時也指出 為了避免產生虛函式表,如果類不是基類的話,析構函式就不需要宣告為虛函式。但是,我們不能預料使用者的行為,你不敢肯定使用者是否會從你的類去派生自己的類。如果使用者以乙個基類指標去刪除乙個派生類的物件,就會...