漫談C++:良好的編程習慣與編程要點【2】

      網友投稿 720 2025-04-02

      漫談C++:良好的編程習慣與編程要點【2】

      轉自:melonstreet

      static與類

      ① 不和對象直接相關的數據,聲明為static

      想象有一個銀行賬戶的類,每個人都可以開銀行賬戶。存在銀行利率這個成員變量,它不應該屬于對象,而應該屬于銀行這個類,由所有的用戶來共享。static修飾成員變量時,該成員變量放在程序的全局區中,整個程序運行過程中只有該成員變量的一份副本。而普通的成員變量存在每個對象的內存中,若把銀行利率放在每個對象中,是浪費了內存。

      ② static成員函數沒有this指針

      static成員函數與普通函數一樣,都是只有一份函數的副本,存儲在進程的代碼段上。不一樣的是,static成員函數沒有this指針,所以它不能夠調用普通的成員變量,只能調用static成員變量。普通成員函數的調用需要通過對象來調用,編譯器會把對象取地址,作為this指針的實參傳遞給成員函數:

      obj.func() ---> Class :: fun(&obj);

      而static成員函數即可以通過對象來調用,也可以通過類名稱來調用。

      ③在類的外部定義static成員變量

      另一個問題是static成員變量的定義。static成員變量必須在類外部進行定義:

      class A

      {

      private:

      static int a; //①

      }

      int A::a = 10; //②

      注意①是聲明,②才是定義,定義為變量分配了內存。

      ④static與類的一些小應用

      這些可以用來應付一下面試,在實現單例模式的時候,static成員函數與static成員變量得到了使用,下面是一種稱為”餓漢式“的單例模式的實現:

      class A

      {

      public:

      static A& getInstance();

      setup(){...};

      private:

      A();

      A(const A & rhs);

      static A a;

      }

      這里把class A的構造函數都設置為私有,不允許用戶代碼創建對象。要獲取對象實例需要通過接口getInstance?!别I漢式“缺點在于無論有沒有代碼需要a,a都被創建出來。下面是改進的單例模式,稱為”懶漢式“:

      class A

      {

      public:

      static A& getInstance();

      etup(){....};

      private:

      A();

      A(const A& rsh);

      ...

      };

      A& A::getInstance()

      {

      static A a; // ☆

      return a;

      }

      "懶漢式"只有在真正需要a時,調用getInstance才創建出唯一實例。這可以看成一個具有拖延癥的單例模式,不到最后關頭不干活。很多設計都體現了這種拖延的思想,比如string的寫時復制,真正需要的時候才分配內存給string對象管理的字符串。

      C++

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格sheet如何合并(excel的sheet合并)
      下一篇:Excel基礎條件格式給單元格格式設置條件實例(條件格式怎么設置)
      相關文章
      国产精品亚洲аv无码播放| 风间由美在线亚洲一区| 精品久久久久亚洲| 最新亚洲精品国偷自产在线| 亚洲国产精品乱码在线观看97| 久久精品国产亚洲av麻豆小说| 亚洲国产精品自在在线观看| 亚洲AV人无码综合在线观看| 久久精品国产亚洲av麻| 亚洲AV日韩AV永久无码绿巨人| 亚洲av午夜福利精品一区人妖| 亚洲精品无码永久在线观看你懂的 | 亚洲Aⅴ无码专区在线观看q| 亚洲成a人片77777kkkk| 亚洲欧洲日产国码久在线观看| 久久丫精品国产亚洲av不卡| 91亚洲国产成人精品下载| 亚洲欧洲自拍拍偷午夜色| 91亚洲性爱在线视频| 亚洲va在线va天堂成人| 亚洲精品无码久久久久A片苍井空| 亚洲精品av无码喷奶水糖心| 国产成人亚洲综合无| 亚洲人成网站色在线入口| 中文字幕精品亚洲无线码一区| 亚洲熟妇无码AV在线播放| 亚洲精品无码久久千人斩| 人人狠狠综合久久亚洲婷婷| 久久水蜜桃亚洲av无码精品麻豆| 亚洲精品国产免费| 亚洲色欲色欲www| 人人狠狠综合久久亚洲| 亚洲精品国产精品乱码不卡 | 亚洲免费视频网址| 亚洲熟妇自偷自拍另欧美| 亚洲成av人片天堂网老年人| 91麻豆国产自产在线观看亚洲 | 亚洲av无码有乱码在线观看| 亚洲精品网站在线观看不卡无广告 | 亚洲av鲁丝一区二区三区| 久久精品国产亚洲av水果派|