1. 程式人生 > >C++中實現防止一個類被其他類繼承

C++中實現防止一個類被其他類繼承

如何在防止一個類被其他的類繼承呢?

如果是僅僅為了達到這個目的可以直接把這個類的建構函式設定成私有的,這樣就杜絕了其他類的繼承。也相當於毀掉了這個類(無法再創造出自己的物件)。

那麼怎麼樣既要保證這個類的完整性,又防止其他類的繼承呢?

這就要藉助友元來實現,因為友元是不可以被繼承的。如果一個類的建構函式要藉助它的友元類,那麼繼承了這個類的類就無法構造自己的物件。從而杜絕了被繼承。

#include <iostream>
using namespace std;
class C;

class BASE
{
        private:
                BASE(){}
                friend class C;    //設class C為class BASE的友元
};
class C: public virtual BASE
{
};
class D:public C
{
};

int main()
{
        C c;
        //D d;   不可以例項化物件
}

為什麼class C要虛擬繼承class BASE 而不是直接繼承呢?

這裡寫圖片描述

若想使用BASE類,通過使用C類實現,若使用者想對C繼承,則失敗,因為D的構造需要呼叫BASE的建構函式,但是D沒有許可權呼叫BASE的建構函式。