色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++中非常有用的設計模式

汽車電子技術 ? 來源:程序喵大人 ? 作者:程序喵大人 ? 2023-02-21 14:21 ? 次閱讀

大家好,今天介紹一個C++中非常常用的模式:pimpl

至于它有什么作用,直接看代碼:

// MyClass.h


class MyClass {
public:
    void func1();
    void func2();


private:
    void func3();
    void func4();


    int a;
    int b;
};

假設我們在開發一個SDK,或者設計某個模塊,需要暴露出去一個MyClass.h頭文件,并向用戶提供func1和func2兩個功能。

但是MyClass中還有一些private函數和字段,這些函數和字段我們本意可能是不想被用戶知道,因為可能里面有些隱私內容,用戶有可能通過這些private方法和字段就能猜到我們的架構及實現。

這也是我們平時設計模塊需要注意的一點:只暴露出該暴露的東西。

那怎么做呢?答案就是pimpl模式。

可以這樣:

// MyClass.h


class MyClass {
public:
    void func1();


    void func2();


private:
    class impl;
    impl* pimpl;
};


// MyClass.cc
class MyClass::impl {
public:
    void func1();
    void func2();


private:
    void func3();
    void func4();


    int a;
    int b;
};


MyClass::MyClass() {
    pimpl = new impl;
}


void MyClass::func1() {
    pimpl->func1();
}

將類的private屬性隱藏進一個內部類,然后通過一個指針訪問(提前聲明)它的接口。在頭文件中只暴露出應該暴露的功能,然后持有一個Impl的指針,而Impl則具體在MyClass.cc中定義,用戶什么都看不到。然后所有的功能都通過Impl完成。頭文件里的Impl的指針也可以通過智能指針(unique_ptr)來代替,但這不是本文的重點。

再總結一下pimpl模式的優點:

  • 非常適合隱藏private實現:如果想要在頭文件中暴露public接口,但又不想暴露private實現的細節,則可以使用pimpl模式來隱藏細節。
  • pimpl模式也被稱為編譯防火墻,是一種用來減少編譯時間的方法。通常來講,如果頭文件里的某些內容變更了,意味著所有引用該頭文件的代碼都要被重新編譯,即使變更的是無法被用戶類訪問的私有成員。將這部分代碼從被引用多次的頭文件里移除到只被引用編譯一次的源文件中,更改此文件就不會付出太長的編譯時間。

大家怎么看?

參考資料

https://en.cppreference.com/w/cpp/language/pimpl

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74825
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1067

    瀏覽量

    47788
  • 頭文件
    +關注

    關注

    0

    文章

    26

    瀏覽量

    10051
  • func
    +關注

    關注

    0

    文章

    2

    瀏覽量

    1086
收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    開發板里的CPLD原程序,一般廠商是不提供的,內部資料,非常有用

    本帖最后由 assingle 于 2011-2-18 14:03 編輯 開發板里的CPLD內部邏輯原理,一般廠商是不提供的,內部資料,非常有用,希望能給大家有參考作用,開發環境QUARTUS II 6.0,CPLD為EPM240T100C5N,超便宜,比EPM712
    發表于 02-18 14:02

    對新手非常有用的電子器件基礎資料

    本帖最后由 eehome 于 2013-1-5 09:56 編輯 對新手非常有用的電子器件基礎資料PCB打樣找華強 http://www.hqpcb.com/3 樣板2天出貨
    發表于 10-20 20:13

    03國賽控制類準備步驟,非常有用

    這是關于國賽準備的一些模塊原理圖以及相關PCB布線等的步驟,非常有用
    發表于 01-23 22:00

    MPLAB Harmony C++怎么使用

    MPLAB和諧文檔(在什么是MPLAB和諧?)“MPLA-和聲沒有用C++測試過,因此,沒有提供對這個編程語言的支持。”——對于2018來說非常令人難以置信。有人成功地使用C++和和聲
    發表于 09-20 09:40

    請問有沒有用C++開發STM32的

    我大學學的C++,相對C語言來說更喜歡C++語言,只是不知道有沒有用C++開發STM32程序的,不是指僅僅玩玩,而是有沒
    發表于 10-26 08:42

    CodeWarrior C and C++ and Assembly 語言參考設計

    本文是英文版的,介紹了CodeWarrior C and C++ and Assembly 語言參考設計,在您的設計中或許有用
    發表于 06-22 15:33 ?74次下載

    大話設計模式C++

    讓大家全方位傻瓜式學習大話設計模式C++
    發表于 07-13 15:11 ?9次下載

    Vim中默認未啟用但實際非常有用的選項

    Vim 作為一款功能強大、選項豐富的編輯器,為許多用戶所熱愛。本文介紹了一些在 Vim 中默認未啟用但實際非常有用的選項。雖然可以在每個 Vim 會話中單獨啟用,但為了創建一個開箱即用的高效編輯環境,還是建議在 Vim 的配置文件中配置這些命令。
    的頭像 發表于 09-25 17:54 ?5586次閱讀

    C++語言的基本構成詳細資料說明

    C++語言中的數據類型、運算、語句結構、數組、指針、函數是C++程序設計的基礎。掌握這些基本內容,對利用C++語言解決一般應用問題是非常必要和有用
    發表于 02-19 14:49 ?0次下載
    <b class='flag-5'>C++</b>語言的基本構成詳細資料說明

    C++常見設計模式解析與實現

    C++常見設計模式解析與實現說明。
    發表于 06-01 15:44 ?11次下載

    CC++混合編程是什么

    這篇文章講解的知識點很“小”,但是在CC++的混合編程中非常重要。因為我們在寫應用程序時,經常利用到第三方的程序。如果我們的代碼用C,但是第三方代碼是
    的頭像 發表于 02-14 13:48 ?2140次閱讀
    <b class='flag-5'>C</b>與<b class='flag-5'>C++</b>混合編程是什么

    17個非常有用的Python技巧

    Python 是一門非常優美的語言,其簡潔易用令人不得不感概人生苦短。在本文中,作者 Gautham Santhosh 帶我們回顧了 17 個非常有用的 Python 技巧,例如查找、分割和合并列表等。這 17 個技巧都非常簡單
    的頭像 發表于 04-10 14:28 ?705次閱讀

    一個簡單但非常有用的小前置放大器電路

    一個簡單但非常有用的小前置放大器電路可以通過連接幾個晶體管來構建。該裝置可輕松將 1mV 信號提升至 100mV 甚至更高。因此,它非常方便放大不能直接與功率放大器一起使用的極小信號。
    的頭像 發表于 06-10 17:27 ?1932次閱讀
    一個簡單但<b class='flag-5'>非常有用</b>的小前置放大器電路

    沒有什么是完美的,但FPGA可能非常有用

    FPGA是非常有用的器件,通常與ADI公司的ADC或功率IC等一起設計到客戶的設計中。FPGA 可以實現微控制器和所需的任何膠水邏輯。在這篇博客中,我將討論一些與功能安全和FPGA相關的問題。
    的頭像 發表于 06-29 10:28 ?1757次閱讀
    沒有什么是完美的,但FPGA可能<b class='flag-5'>非常有用</b>

    c++多行注釋快捷鍵

    C++中,多行注釋(也稱為塊注釋)是一種用于注釋大段代碼或多個語句的方法。當你希望暫時禁用一些代碼或者解釋特定部分代碼的作用時,多行注釋是非常有用的。 在C++中,多行注釋以 /* 開始,以
    的頭像 發表于 11-22 10:24 ?9425次閱讀
    主站蜘蛛池模板: 麻豆Av国产在线播放 | 俄罗斯6一9泑女网站 | 日韩在线 无码 精品 | 欧美日韩免费看 | WWW国产精品内射熟女 | 涩涩游戏盒 | 最近免费中文字幕MV在线视频3 | 91精品国产高清久久久久久 | 国产精品看高国产精品不卡 | 99精品欧美一区二区三区美图 | 国产偷国产偷亚洲高清SWAG | 亚洲 日韩 欧美 另类 蜜桃 | 亚洲伊人成综合人影院 | 亚洲高清国产品国语在线观看 | 精品国产午夜福利在线观看蜜月 | 肉肉描写很细致的黄文 | 在线观看免费视频a | 青青精品国产自在线拍 | 九九精品视频一区二区三区 | 热热久久超碰精品中文字幕 | 国产福利视频一区二区 | 小莹的性荡生活40章 | 国产小视频在线高清播放 | 免费视频xxx | 久热在线这里只有精品7 | 高h 大尺度纯肉 np快穿 | 国产在线播放不卡 | 精品粉嫩BBWBBZBBW | 国产精品久久久久久人妻香蕉 | 把极品白丝班长啪到腿软 | eussse手机电影在线观看 | 美女逼逼毛茸茸 | 日本十八禁无遮拦啪啪漫画 | 忘忧草秋观看未满十八 | 欧美人与动牲交A精品 | 亚洲qvod图片区电影 | 一品道门免费视频韩国 | 久久黄色小视频 | 俄罗斯bbbbbbbbb大片 | 久久婷婷五月免费综合色啪 | 亚洲中文字幕在线第六区 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品