C 類防止繼承

2021-06-06 17:58:34 字數 761 閱讀 8318

**:

這裡面介紹一種借用虛繼承和友元機制實現的方法。其實說到底,防止乙個類被繼承,我們還是想怎麼使的派生類在構造時不能夠呼叫基類的建構函式,從而不能完成繼承。我們都知道,派生類物件初始化時,首先要執行基類建構函式,將基類子物件進行初始化,之後再執行派生類的建構函式,初始化派生類中特質不同的成員。下面介紹一種方法:

#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.類繼承的實現。以下定義兩個...