C++總結----靜態成員,const修飾類成員,內聯函數超詳解

      網友投稿 842 2025-03-31

      博客鏈接:https://blog.csdn.net/qq_39412582/article/details/81215272 正文開始: ##一 · 靜態成員 ## 我們知道全局變量能夠實現數據共享,如果在多個程序文件中有多個函數,每一個函數中都可以來改變全局變量的值,但是這樣做是不安全的,如不小心改錯就會導致程序崩潰,因此在實際運用中很少用到全局變量。 但是有時候我們就是要用到多個對象之間實現數據共享,除了全局變量,就是我們今天要提到的靜態成員。

      1.1 靜態數據成員

      class Person

      {

      private:

      char* _name;

      static char* _gender;??? //把_gender定義為靜態數據成員

      int?? _age;

      }

      靜態數據成員是一個特殊的數據成員,以static開頭。如果希望個對象的數據成員的值是一樣的,就可以把它定義為靜態數據成員。聲明為靜態數據成員有個好處就是它只占用一分內存空間,而不是每個對象都為它留下一塊空間。

      對于靜態成員函數作以下幾點說明: ⑴前面說過,如果只申明類而未定義對象,則類的一般數據成員是不占空間的,只有在定義對象時,才會為對象的數據成員分配空間。但是靜態數據成員不屬于某一個對象,在為對象所分配的空間中不包括靜態數據成員所占的空間,它是在對象之外單獨開辟空間,只要定義了靜態成員變量,即使不定義對象,也會為其分配空間還能被引用。 ⑵靜態數據成員既然不會隨著對象的建立而分配空間,那么自然也不會隨著對象的撤銷而釋放。靜態數據成員是在程序開始運行時被分配空間,到程序結束時才會釋放空間。 ⑶靜態數據成員只能在類外進行初始化

      char* Person::_gender ="man"

      要注意的是不能用參數初始化表來對靜態數據成員初始化: {:--} ⑷靜態數據成員既可以通過對象名引用還可以通過類名引用:

      class Person

      {

      public:

      Person(char* name, char* gender, int age)

      :_name(name)

      , _age(age)

      {}

      static char* _gender;

      private:

      char* _name;

      int? _age;

      };

      char* Person::_gender = "man";

      int main()

      {

      Person p("Peter", "man", 18);

      cout << Person::_gender << endl;

      cout << p._gender << endl;

      return 0;

      }

      {:--}

      如果靜態數據成員定義為私有的,就不能在類外直接引用,而必須通過公有函數進行引用。

      class Person

      {

      public:

      Person(char* name, char* gender, int age)

      :_name(name)

      {}

      static char* _gender;

      int PersonAge();

      private:

      char* _name;

      static int? _age;

      };

      char* Person::_gender = "man";

      int Person::PersonAge()

      {

      return _age=18;

      }

      ⑸與全局變量不同的是,靜態數據成員的作用域只限于定義該類的作用域中,在類的作用域中可以通過類名和域運算符“::”來進行引用

      2 靜態成員函數 和靜態數據成員一樣,成員函數也可以是靜態的,在類里聲明的函數名前加上**“static”就成了靜態成員函數,它是類的一部分而不是對象的一部分。如果在類為引用靜態成員函數需要用類名和域運算符“::”**。如:

      Person::PersonAge();

      實際上也可以寫成:

      p.PersonAge();

      但這并不能說這個函數是屬于對象p的,而是只能說用了p的類型而已。 當調用一個對象的成員函數數時(非靜態成員函數),系統會把該對象的起始地址賦給成員函數的this指針。而靜態成員數不屬于對象的成員函數,與任何對象無關,因此靜態成員函數沒有this指針。既然沒有指向某一對象,就無法對一個對象里的非靜態成員進行默認訪問(即在引用數據成員時不指定對象名)----面試題。

      靜態成員函數可以直接引用本類中的靜態成員,我們給個例子再來說明一下:

      class Box

      {

      public:

      C++總結----靜態成員,const修飾類成員,內聯函數超詳解

      Box(int length,int width,int height)

      : _width(width)

      , _height(height)

      {}

      static void volume();???? //靜態成員函數

      private:

      static int _length;

      int _width;

      int _height;

      };

      void Box::volume()

      {

      //cout<<_width<

      本文轉載自異步社區

      C++

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

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

      上一篇:wps文檔加密 密碼忘記了怎么解(wps文檔加密忘了密碼怎么辦)
      下一篇:可微分的「OpenCV」:這是基于 PyTorch 的可微計算機視覺庫
      相關文章
      亚洲国色天香视频| 亚洲人成免费网站| 亚洲精品国精品久久99热一| 日韩精品一区二区亚洲AV观看 | 亚洲一区二区三区四区在线观看| 亚洲日本va在线观看| 亚洲邪恶天堂影院在线观看| 国产亚洲美女精品久久久2020| 亚洲狠狠成人综合网| 日韩一卡2卡3卡4卡新区亚洲| 亚洲av无码一区二区三区天堂古代| 亚洲AV日韩AV永久无码绿巨人| 国产成人高清亚洲一区久久| 亚洲视频在线观看2018| 国产精品久久久亚洲| 久久久久久亚洲精品无码| 亚洲人成电影网站| 亚洲欧洲精品在线| 麻豆亚洲AV永久无码精品久久 | 亚洲AV成人片色在线观看高潮| 久久青青草原亚洲AV无码麻豆| 亚洲Aⅴ无码专区在线观看q| 亚洲综合在线观看视频| 亚洲日本乱码一区二区在线二产线| 亚洲精品国产手机| 亚洲一区二区免费视频| 亚洲午夜无码久久久久软件| 亚洲成av人在线观看网站| 国产成人亚洲综合a∨| 亚洲日韩在线观看| 亚洲精品成人片在线播放| 国产亚洲精品自在线观看| 久久久久久久综合日本亚洲| 亚洲av无码成h人动漫无遮挡 | 亚洲制服丝袜一区二区三区| 亚洲日本久久久午夜精品| 亚洲精品av无码喷奶水糖心| 亚洲VA综合VA国产产VA中| 亚洲一区无码中文字幕 | 亚洲熟女精品中文字幕| 国产成人亚洲精品播放器下载 |