日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ static静态成员函数

發布時間:2025/3/12 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ static静态成员函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在類中,static 除了可以聲明靜態成員變量,還可以聲明靜態成員函數。普通成員函數可以訪問所有成員(包括成員變量和成員函數),靜態成員函數只能訪問靜態成員。

編譯器在編譯一個普通成員函數時,會隱式地增加一個形參 this,并把當前對象的地址賦值給 this,所以普通成員函數只能在創建對象后通過對象來調用,因為它需要當前對象的地址。而靜態成員函數可以通過類來直接調用,編譯器不會為它增加形參 this,它不需要當前對象的地址,所以不管有沒有創建對象,都可以調用靜態成員函數。

普通成員變量占用對象的內存,靜態成員函數沒有 this 指針,不知道指向哪個對象,無法訪問對象的成員變量,也就是說靜態成員函數不能訪問普通成員變量,只能訪問靜態成員變量。

普通成員函數必須通過對象才能調用,而靜態成員函數沒有 this 指針,無法在函數體內部訪問某個對象,所以不能調用普通成員函數,只能調用靜態成員函數。

靜態成員函數與普通成員函數的根本區別在于:普通成員函數有 this 指針,可以訪問類中的任意成員;而靜態成員函數沒有 this 指針,只能訪問靜態成員(包括靜態成員變量和靜態成員函數)。

通過靜態成員函數來獲得學生的總人數和總成績:

#include <iostream> using namespace std;class Student{ public:Student(char *name, int age, float score);void show(); public: //聲明靜態成員函數static int getTotal();static float getPoints(); private:static int m_total; //總人數static float m_points; //總成績 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<<",成績是"<<m_score<<endl; } //定義靜態成員函數 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<<"當前共有"<<total<<"名學生,總成績是"<<points<<",平均分是"<<points/total<<endl;return 0; }

運行結果:

張三的年齡是15,成績是90.6 李四的年齡是16,成績是80.5 王五的年齡是16,成績是99 趙六的年齡是14,成績是60.8 當前共有4名學生,總成績是330.9,平均分是82.725

總人數 m_total 和總成績 m_points 由各個對象累加得到,必須聲明為 static 才能共享;getTotal()、getPoints() 分別用來獲取總人數和總成績,為了訪問 static 成員變量,我們將這兩個函數也聲明為 static。

在C++中,靜態成員函數的主要目的是訪問靜態成員。getTotal()、getPoints() 當然也可以聲明為普通成員函數,但是它們都只對靜態成員進行操作,加上 static 語義更加明確。

和靜態成員變量類似**,靜態成員函數在聲明時要加 static,在定義時不能加 static**。靜態成員函數可以通過類來調用(一般通過類來進行調用),也可以通過對象來調用。

總結

以上是生活随笔為你收集整理的C++ static静态成员函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。