日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          "); //-->

          博客專(zhuān)欄

          EEPW首頁(yè) > 博客 > C++ static靜態(tài)成員函數(shù)詳解

          C++ static靜態(tài)成員函數(shù)詳解

          發(fā)布人:電子禪石 時(shí)間:2022-04-07 來(lái)源:工程師 發(fā)布文章

          在類(lèi)中,static 除了可以聲明靜態(tài)成員變量,還可以聲明靜態(tài)成員函數(shù)。普通成員函數(shù)可以訪問(wèn)所有成員(包括成員變量和成員函數(shù)),靜態(tài)成員函數(shù)只能訪問(wèn)靜態(tài)成員。

          編譯器在編譯一個(gè)普通成員函數(shù)時(shí),會(huì)隱式地增加一個(gè)形參 this,并把當(dāng)前對(duì)象的地址賦值給 this,所以普通成員函數(shù)只能在創(chuàng)建對(duì)象后通過(guò)對(duì)象來(lái)調(diào)用,因?yàn)樗枰?dāng)前對(duì)象的地址。而靜態(tài)成員函數(shù)可以通過(guò)類(lèi)來(lái)直接調(diào)用,編譯器不會(huì)為它增加形參 this,它不需要當(dāng)前對(duì)象的地址,所以不管有沒(méi)有創(chuàng)建對(duì)象,都可以調(diào)用靜態(tài)成員函數(shù)。

          普通成員變量占用對(duì)象的內(nèi)存,靜態(tài)成員函數(shù)沒(méi)有 this 指針,不知道指向哪個(gè)對(duì)象,無(wú)法訪問(wèn)對(duì)象的成員變量,也就是說(shuō)靜態(tài)成員函數(shù)不能訪問(wèn)普通成員變量,只能訪問(wèn)靜態(tài)成員變量。

          普通成員函數(shù)必須通過(guò)對(duì)象才能調(diào)用,而靜態(tài)成員函數(shù)沒(méi)有 this 指針,無(wú)法在函數(shù)體內(nèi)部訪問(wèn)某個(gè)對(duì)象,所以不能調(diào)用普通成員函數(shù),只能調(diào)用靜態(tài)成員函數(shù)。

          靜態(tài)成員函數(shù)與普通成員函數(shù)的根本區(qū)別在于:普通成員函數(shù)有 this 指針,可以訪問(wèn)類(lèi)中的任意成員;而靜態(tài)成員函數(shù)沒(méi)有 this 指針,只能訪問(wèn)靜態(tài)成員(包括靜態(tài)成員變量和靜態(tài)成員函數(shù))。

          下面是一個(gè)完整的例子,該例通過(guò)靜態(tài)成員函數(shù)來(lái)獲得學(xué)生的總?cè)藬?shù)和總成績(jī):


          #include <iostream>
          using namespace std;
          
          class Student{
          public:
              Student(char *name, int age, float score);
              void show();
          public:  //聲明靜態(tài)成員函數(shù)
              static int getTotal();
              static float getPoints();
          private:
              static int m_total;  //總?cè)藬?shù)
              static float m_points;  //總成績(jī)
          private:
              char *m_name;
              int m_age;
              float m_score;
          };
          
          int Student::m_total = 0;
          float Student::m_points = 0.0;
          
          Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){
              m_total++;
              m_points += score;
          }
          void Student::show(){
              cout<<m_name<<"的年齡是"<<m_age<<",成績(jī)是"<<m_score<<endl;
          }
          //定義靜態(tài)成員函數(shù)
          int Student::getTotal(){
              return m_total;
          }
          float Student::getPoints(){
              return m_points;
          }
          
          int main(){
              (new Student("小明", 15, 90.6)) -> show();
              (new Student("李磊", 16, 80.5)) -> show();
              (new Student("張華", 16, 99.0)) -> show();
              (new Student("王康", 14, 60.8)) -> show();
          
              int total = Student::getTotal();
              float points = Student::getPoints();
              cout<<"當(dāng)前共有"<<total<<"名學(xué)生,總成績(jī)是"<<points<<",平均分是"<<points/total<<endl;
          
              return 0;
          }

          運(yùn)行結(jié)果:
          小明的年齡是15,成績(jī)是90.6
          李磊的年齡是16,成績(jī)是80.5
          張華的年齡是16,成績(jī)是99
          王康的年齡是14,成績(jī)是60.8
          當(dāng)前共有4名學(xué)生,總成績(jī)是330.9,平均分是82.725

          總?cè)藬?shù) m_total 和總成績(jī) m_points 由各個(gè)對(duì)象累加得到,必須聲明為 static 才能共享;getTotal()、getPoints() 分別用來(lái)獲取總?cè)藬?shù)和總成績(jī),為了訪問(wèn) static 成員變量,我們將這兩個(gè)函數(shù)也聲明為 static。

          C++中,靜態(tài)成員函數(shù)的主要目的是訪問(wèn)靜態(tài)成員。getTotal()、getPoints() 當(dāng)然也可以聲明為普通成員函數(shù),但是它們都只對(duì)靜態(tài)成員進(jìn)行操作,加上 static 語(yǔ)義更加明確。

          和靜態(tài)成員變量類(lèi)似,靜態(tài)成員函數(shù)在聲明時(shí)要加 static,在定義時(shí)不能加 static。靜態(tài)成員函數(shù)可以通過(guò)類(lèi)來(lái)調(diào)用(一般都是這樣做),也可以通過(guò)對(duì)象來(lái)調(diào)用,上例僅僅演示了如何通過(guò)類(lèi)來(lái)調(diào)用。

          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: C++

          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉