我能防止別人繼承我自己的類嗎的
可以,但你為什么要那么做呢?這是兩個常見的回答:
效率:避免我的函數(shù)被虛擬調(diào)用
接下來就需要大家的努力了。 安全:保證我的類不被用作一個基類(例如,保證我能夠復(fù)制對象而不用擔(dān)心出事)
根據(jù)我的經(jīng)驗,效率原因往往是不必要的擔(dān)心。在C++中,虛擬函數(shù)調(diào)用是如此之快,以致于它們在一個包含虛擬函數(shù)的類中被實際使用時,相比普通的函數(shù)調(diào)用,根本不會產(chǎn)生值得考慮的運行期開支。注意,僅僅通過指針或引用時,才會使用虛擬調(diào)用機制。當(dāng)直接通過對象名字調(diào)用一個函數(shù)時,虛擬函數(shù)調(diào)用的開支可以被很容易地優(yōu)化掉。
如果確實有真正的需要,要將一個類封閉起來以防止虛擬調(diào)用,那么可能首先應(yīng)該問問為什么它們是虛擬的。我看見過一些例子,那些性能表現(xiàn)不佳的函數(shù)被設(shè)置為虛擬,沒有其他原因,僅僅是因為“我們習(xí)慣這么干”。
這個問題的另一個部分,由于邏輯上的原因如何防止類被繼承,有一個解決方案。不幸的是,這個方案并不完美。它建立在這樣一個事實的基礎(chǔ)之上,那就是:大多數(shù)的繼承類必須建立一個虛擬的基類。這是一個例子:
class Usable;
class Usable_lock {
friend class Usable;
private:
Usable_lock() {}
Usable_lock(const Usable_lock) {}
};
class Usable : public virtual Usable_lock {
// ...
public:
Usable();
Usable(char*);
// ...
};
Usable a;
class DD : public Usable { };
DD dd; // 錯誤: DD::DD() 不能訪問
// Usable_lock::Usable_lock()是一個私有成員
查看本文來源
鄭州治婦科哪家醫(yī)院好米諾地爾搽劑治療斑禿用法
銀川陰道炎
- “天河科普”小程序上線,動動手指便可查詢心里的科普基地
- 表面是清純玉女、實則情史混亂的7位女星,個個定性你的想象
- 法網(wǎng)前瞻丨費達(dá)拿會重奪王冠么?
- 陳粒:她是民謠界唯一的“老公”,歌里藏著一整個武當(dāng)
- 中國西電(601179.SH)聘任石丹兼任總會計師、董事會秘書
- 【東方焦點】中醫(yī)護(hù)理重癥建設(shè)開啟新篇章乳腺??浦嗅t(yī)護(hù)理重癥:給您家的溫馨和呵護(hù)
- 盒裝豆腐比散裝豆腐好?吃豆腐有講究,這3點別過分,關(guān)乎健康
- 水力學(xué)科學(xué)實驗
- 曾是國產(chǎn)游戲的巔峰?因氪金事件涼涼,卻是無數(shù)道具的青春回憶
- 花蛤吐沙時只放鹽遠(yuǎn)遠(yuǎn)不夠,加一點“它”,花蛤吐沙才夠下決心
- 4/27 意甲 博洛尼亞 VS 國際米蘭 歐冠 切爾西VS比利亞雷亞爾
- 育碧競速新游戲特惠活動《極限國度》終極版239.2元