日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

ideajava目录显示类成员_面试:C++不可继承类

發布時間:2025/3/15 c/c++ 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ideajava目录显示类成员_面试:C++不可继承类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:wxquare

鏈接:https://www.cnblogs.com/wxquare/p/7280025.html

面試中可能遇到讓設計一個無法被繼承的類。最簡單的實現是將該類的構造函數設置為私有的,然后通過靜態成員函數調用私有構造函數實例化對象,這樣的類確實不可繼承,但是使用起來非常不方便,必須使用靜態成員實例化對象,而且對象存儲在堆中,無法像一個普通的類一樣的被使用。最佳的設計是結合私有構造函、友元、虛擬繼承實現。

一、簡單實現

class?Simple{
private:
????Simple(){};
????~Simple(){}
private:
????static?Simple*?getInstance(){
????????return?new?Simple();
????}
????static?void?deleteInstance(Simple*?instance){
????????delete?instance;
????}
};

二、最佳實現

template<typename?T>
class?NoneInherit?{
????friend?T;
private:
????NoneInherit()?{
????}
????~NoneInherit()?{
????}
};

class?Finalclass:?virtual?public?NoneInherit?{public:
????Finalclass()?{
????}
????~Finalclass()?{
????}
};//class?TestClass:?public?Finalclass?{//};

關鍵點:

  • 模板類NoneInherit類,構造函數和析構函數都設置為私有,模板參數T設置為友元,這樣友元類可以調用構造函數。例如FinalClass是NoneInherit的友元類,可以使用基類的私有構造函數和析構函數

  • 虛擬繼承virtual是最關鍵的點。如果繼承時去掉virtual,FinalClass還是可以被繼承的,那么為什么需要使用虛擬繼承呢?因為在普通繼承中,每個類只是初始化自己的直接的基類。那意味著,如果不使用virtual,TestClass繼承Finalclass,由FinalClass再去調用NoneInherit類,由于FinalClass是NoneInHerit的基類,因此整個繼承沒有任何問題。由于FinalClass使用了虛擬繼承,在創建TestClass的時候,TestClass類的構造函數要負責虛基類NoneInherit類的構造,而NoneInherit的構造函數是私有的,友元關系也無法繼承,因此TestClass類沒有訪問的權限。


  • ●編號483,輸入編號直達本文

    ●輸入m獲取文章目錄

    C語言與C++編程

    分享C/C++技術文章

    總結

    以上是生活随笔為你收集整理的ideajava目录显示类成员_面试:C++不可继承类的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。