**:
這裡面介紹一種借用虛繼承和友元機制實現的方法。其實說到底,防止乙個類被繼承,我們還是想怎麼使的派生類在構造時不能夠呼叫基類的建構函式,從而不能完成繼承。我們都知道,派生類物件初始化時,首先要執行基類建構函式,將基類子物件進行初始化,之後再執行派生類的建構函式,初始化派生類中特質不同的成員。下面介紹一種方法:
#include
using
namespace
std;
class
base1;
class
base;
class
base1:
virtual
public
base;
class
drived:
public
base1;
intmain()
首先定義乙個基類base,但在base類中,其建構函式被定義為私有的。接下來base1虛繼承base類,base類成了虛基類,而base1是base的友元,可以呼叫base的建構函式初始化物件。但是到了派生類drived時候,它是最低層的派生類,按照規則「最低層派生類的建構函式初始化虛基類」,drived類跨過base1直接呼叫base類中的建構函式去初始化虛基類部分的子物件,然而由於base類的建構函式是私有的,drived類的建構函式無權呼叫,因此初始化失敗。這就導致了乙個有趣的現象,drived類繼承base1類,結果由於無法呼叫虛基類base的建構函式而無法完成物件的建立,給人的感覺就是base1類無法被繼承。
C 類繼承 公有繼承
使用公有繼承,可以達到如下的特性 tabtenn1.h ifndef tabtenn1 h define tabtenn1 h include using std string class tabletennisplayer 基類宣告 void resettable bool v class rat...
如何防止乙個類被繼承?
c view第一期 此處一定要宣告,否則在nonderivablehelper類中將nonderivable定義為友元類時,會認為是private中的某個類 class nonderivable namespace private friend class nonderivable ifdef nd...
C 類的繼承
繼承是物件導向程式設計的主要特徵之一,它可以讓你重用 可以節省程式設計的時間。1.object類的作用。object object為別名 是所有類的基類,在c 中所有的類都直接或間接繼承於object,如果在乙個類的宣告中沒有指定它繼承於哪個類則是繼承於object類。2.類繼承的實現。以下定義兩個...