Cpp 对象模型探索 / 不能被继承的类
生活随笔
收集整理的這篇文章主要介紹了
Cpp 对象模型探索 / 不能被继承的类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
兩種方法
栗子
class A { private:A() {}friend class B; }; class B : virtual public A { public:int m_b; };我們的目的是讓 B 成為一個不能被繼承的類。分析代碼,由于 B 是 A 的友元,所以即使 A 的構造函數是私有的,B也是可以調用的,所以 B 繼承 A 這個關系是成立的。
關鍵來了,由于 B 是虛繼承 A,這就導致了如果 C 類想繼承 B,則 C 類必須首先調用 A 類的構造函數(詳情),而 A 類的構造函數是私有的,所以 C 類不能調用 A 類的構造函數,所以,B 類是不可繼承的。
總結
使用時盡量使用方案 1,因為方案 2 是以犧牲性能、破壞類的封裝性為代價的。
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的Cpp 对象模型探索 / 不能被继承的类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cpp 对象模型探索 / 带有虚继承类的
- 下一篇: C/Cpp / const 用法