在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中非常有用的設(shè)計(jì)模式

汽車電子技術(shù) ? 來源:程序喵大人 ? 作者:程序喵大人 ? 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;
};

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

但是MyClass中還有一些private函數(shù)和字段,這些函數(shù)和字段我們本意可能是不想被用戶知道,因?yàn)榭赡芾锩嬗行╇[私內(nèi)容,用戶有可能通過這些private方法和字段就能猜到我們的架構(gòu)及實(shí)現(xiàn)。

這也是我們平時設(shè)計(jì)模塊需要注意的一點(diǎn):只暴露出該暴露的東西。

那怎么做呢?答案就是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屬性隱藏進(jìn)一個內(nèi)部類,然后通過一個指針訪問(提前聲明)它的接口。在頭文件中只暴露出應(yīng)該暴露的功能,然后持有一個Impl的指針,而Impl則具體在MyClass.cc中定義,用戶什么都看不到。然后所有的功能都通過Impl完成。頭文件里的Impl的指針也可以通過智能指針(unique_ptr)來代替,但這不是本文的重點(diǎn)。

再總結(jié)一下pimpl模式的優(yōu)點(diǎn):

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

大家怎么看?

參考資料

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73868
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1045

    瀏覽量

    46293
  • 頭文件
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    9906
  • func
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1047
收藏 人收藏

    評論

    相關(guān)推薦

    開發(fā)板里的CPLD原程序,一般廠商是不提供的,內(nèi)部資料,非常有用

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

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

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

    03國賽控制類準(zhǔn)備步驟,非常有用

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

    MPLAB Harmony C++怎么使用

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

    請問有沒有用C++開發(fā)STM32的

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

    CodeWarrior C and C++ and Assembly 語言參考設(shè)計(jì)

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

    大話設(shè)計(jì)模式C++

    讓大家全方位傻瓜式學(xué)習(xí)大話設(shè)計(jì)模式C++
    發(fā)表于 07-13 15:11 ?7次下載

    Vim中默認(rèn)未啟用但實(shí)際非常有用的選項(xiàng)

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

    C++語言的基本構(gòu)成詳細(xì)資料說明

    C++語言中的數(shù)據(jù)類型、運(yùn)算、語句結(jié)構(gòu)、數(shù)組、指針、函數(shù)是C++程序設(shè)計(jì)的基礎(chǔ)。掌握這些基本內(nèi)容,對利用C++語言解決一般應(yīng)用問題是非常必要和有用
    發(fā)表于 02-19 14:49 ?0次下載
    <b class='flag-5'>C++</b>語言的基本構(gòu)成詳細(xì)資料說明

    C++常見設(shè)計(jì)模式解析與實(shí)現(xiàn)

    C++常見設(shè)計(jì)模式解析與實(shí)現(xiàn)說明。
    發(fā)表于 06-01 15:44 ?11次下載

    CC++混合編程是什么

    這篇文章講解的知識點(diǎn)很“小”,但是在CC++的混合編程中非常重要。因?yàn)槲覀冊趯憫?yīng)用程序時,經(jīng)常利用到第三方的程序。如果我們的代碼用C,但是第三方代碼是
    的頭像 發(fā)表于 02-14 13:48 ?1794次閱讀
    <b class='flag-5'>C</b>與<b class='flag-5'>C++</b>混合編程是什么

    17個非常有用的Python技巧

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

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

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

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

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

    c++多行注釋快捷鍵

    C++中,多行注釋(也稱為塊注釋)是一種用于注釋大段代碼或多個語句的方法。當(dāng)你希望暫時禁用一些代碼或者解釋特定部分代碼的作用時,多行注釋是非常有用的。 在C++中,多行注釋以 /* 開始,以
    的頭像 發(fā)表于 11-22 10:24 ?8707次閱讀
    主站蜘蛛池模板: 午夜在线播放视频在线观看视频 | 中文字幕第一 | 日本高清视频网站www | 欧美成人亚洲 | 人人免费人人专区 | 丁香花五月婷婷开心 | 手机在线观看视频你懂的 | 99热色 | 国片一级 免费看 | 99久久精品免费看国产免费 | 天使色吧| 午夜高清免费观看视频 | 国内真实实拍伦视频在线观看 | 日本人xxxxxxxxxⅹ68 | 免费视频在线视频观看1 | 苍井优一级毛片免费观看 | 中文字幕亚洲色图 | 美女被拍拍拍拍拍拍拍拍 | 欧美一区二区三区在线观看免费 | 亚洲深夜 | 久草干 | 欧美精品网站 | 国产精品香蕉成人网在线观看 | 成人亚洲欧美综合 | 国产成人高清精品免费5388密 | 午夜一级影院 | 天天爱天天做天天爽夜夜揉 | 在线观看精品国产入口 | 日本成人a视频 | 日本成人资源 | 在线亚洲精品 | 午夜欧美成人久久久久久 | 国产区精品高清在线观看 | 91正在播放 | 久久久国产精品免费 | 全国最大色成免费网站 | 1000部啪啪未满十八勿入 | 亚洲一区二区免费视频 | 性香港xxxxx免费视频播放 | 狠狠做深爱婷婷久久一区 | 五月天婷婷伊人 |