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 而不是直接繼承呢?
相關推薦
C++中實現防止一個類被其他類繼承
如何在防止一個類被其他的類繼承呢? 如果是僅僅為了達到這個目的可以直接把這個類的建構函式設定成私有的,這樣就杜絕了其他類的繼承。也相當於毀掉了這個類(無法再創造出自己的物件)。 那麼怎麼樣既要保證這個類的完整性,又防止其他類的繼承呢? 這就要藉助友元來實現,因為友元是不
c++如何防止一個類被其他類繼承
如何在防止一個類被其他的類繼承呢? 如果是僅僅為了達到這個目的可以直接把這個類的建構函式設定成私有的,這樣就杜絕了其他類的繼承。也相當於毀掉了這個類(無法再創造出自己的物件)。 那麼怎麼樣既要保證這個類的完整性,又防止其他類的繼承呢? 這就要藉助友元來實現
用C++實現一個二叉樹類
/**//** 昨天參加宜搜的筆試,要求用C++寫一二叉樹類,實現插入,刪除,定位功能,輾轉再三,* 卻無從下手,甚急,終基礎不好,今天再想,通過層次遍歷二叉樹,再進行實現相關功能* 實也不難. 以下程式碼*//**//** FileName:BTree.cpp* Description:binary tre
c++實現一個簡單的字串類
// string.cpp : 定義控制檯應用程式的入口點。 //c++語言基礎,實現一個簡單的string類 #include <iostream> #include <string> #include "stdlib.h" #include
在不繼承Activity類的其他類中啟動Activity
先給類中傳Context引數然後Intent intent = new Intent(context,LoginActivity.class); context.startActivity(intent);就可以啟動您要啟動的Activity了
c++ — 實現一個簡單的string類
string類的實現 C++使用起來非常方便,原因的它裡面包含的類,這種面向物件的思想讓我們程式設計變得異常方便。今天我們來實現一個string類,這
如何在Oracle中 查詢一個表被其他數據庫對象引用[z]
選擇 條件 資料 一個 union all 同時 rom 整理 自己 這兩天老大讓我再oracle中把要替換的表被其他對象引用之處找出來,整理一份表,接到這個任務,我是一臉懵逼,怎麽找?大海撈針麽?問同事、查資料,自己研究,最後整理一下僅供大家參考,同時以備將來回顧。本篇只
如何在Oracle中 查詢一個表被其他資料庫物件引用[z]
這兩天老大讓我再oracle中把要替換的表被其他物件引用之處找出來,整理一份表,接到這個任務,我是一臉懵逼,怎麼找?大海撈針麼?問同事、查資料,自己研究,最後整理一下僅供大家參考,同時以備將來回顧。本篇只涉及表被其他資料庫物件引用,不涉及外來鍵,想尋找外來鍵的,自己檢視下面附有的連結。 首先有下列幾種方式:
用C++設計一個不能被繼承的類(轉)
它的 設計 指定 基於 構造 重寫 rtu 構造函數、析構函數 析構函數 在Java 中定義了關鍵字final,被final修飾的類不能被繼承。 首先想到的是在C++中,子類的構造函數會自動調用父類的構造函數。同樣,子類的析構函數也會自動調用父類的析構函數。要想一個類不能
面試題15——用C++設計一個不能被繼承的類
template <typename T>class A { friend T; private: A(){} ~A(){} }; class B:virtual public A<B> { public: B(){} ~B(){} }; class C
C++中定義一個不能被繼承的類(友元類+類模板)
自從C++11標準出來之後,就有了關鍵字final可以直接宣告一個類不能被繼承。那麼,在此之前如果想要一個類不能被繼承,可能還需要下一番功夫。 文章目錄 1.宣告建構函式為私有 2.子類宣告為基類的友元類 3.虛繼承——子類
用c++設計一個不能被繼承的類
分析:這是Adobe 公司2007 年校園招聘的最新筆試題。這道題除了考察應聘者的C++ 基本功底外,還能考察反應能力,是一道很好的題目。 在Java 中定義了關鍵字final ,被final 修飾的類不能被繼承。但在C++ 中沒有final 這個關鍵字,要實
59.用C++ 設計一個不能被繼承的類
首先想到的是在C++ 中,子類的建構函式會自動呼叫父類的建構函式。同樣,子類的解構函式也會自動呼叫父類的解構函式。要想一個類不能被繼承,我們只要把它的建構函式和解構函式都定義為私有函式。那麼當一個類試圖從它那繼承的時候,必然會由於試圖呼叫建構函式、解構函式而導致編譯錯誤。
第三十一節 C++ 繼承之如何在派生類中呼叫基類被覆蓋的函式成員(方法)
#include <iostream> using namespace std; /*有些基類的方法在派生類被覆蓋,但有時我們需要呼叫基類的方法。 * 這裡提供了兩種方式去呼叫基類被覆蓋的
C++發哥筆記(4):類的繼承
rcp 繼承 特點 face 系列 表示 導致 編譯 代碼 繼承 在C++裏,有繼承的語法來表示is kind of的關系 class Tutorial { }; class VideoTutorial : public Tutorial { }; 語法:class
7,裝飾者模式(Decorator Pattern)動態的給一個對象添加一些額外的職責。就增加功能來說,此模式比生成子類更為靈活。繼承關系的一個替換方案。
做到 活性 splay .com 重新 裝飾 run play 情況 裝飾( Decorator )模式又叫做包裝模式。通過一種對客戶端透明的方式來擴展對象的功能,是繼承關系的一個替換方案。 裝飾模式就是把要添加的附加功能分別放在單獨的類中,並讓這個
類的構建和繼承機制(c++)
三種 ges cnblogs private 有一個 只有一個 public 改變 帶來 構建類: 抽象:將同類事物的共同屬性和行為提取出來並將其用變量和函數表達出來; 封裝:將抽象得來的變量和函數捆綁在一起形成一個完整的類(即這類事物擁有了屬性和行為) 控制訪問權限: p
c#中接口、抽象類、繼承綜合小練習
void strac 遊泳 program pac AC 綜合 abs clas 1 namespace Test 2 { 3 class Program 4 { 5 static void Main(string[] args)
C++ 學習筆記 (六) 繼承- 子類與父類有同名函數,變量
pan end main函數 類繼承 class 分享圖片 共享 code 訪問 學習了類的繼承,今天說一下當父類與子類中有同名函數和變量時那麽程序將怎麽執行。首先明確當基類和子類有同名函數或者變量時,子類依然從父類繼承。 舉例說明: 例
C++快速入門---this指標和類的繼承(10)
C++快速入門---this指標和類的繼承(10) this是一個特殊的指標 class Human { char fishc; Human(char fishc); } Human::Human(char