C++类与static关键字
五句話概括:靜態(tài)成員變量和靜態(tài)成員函數(shù)都屬于類的,不屬于具體某個(gè)對(duì)象。
? ? ? ? ? ? ? ? ? ? ?靜態(tài)成員變量定義時(shí),可以在類外定義,不受訪問權(quán)限限制,但是在訪問時(shí),卻要遵循訪問權(quán)限限制。
? ? ? ? ? ? ? ? ? ? ?靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量。普通函數(shù)既可以訪問靜態(tài)成員變量,也可以訪問普通成員變量。
? ? ? ? ? ? ? ? ? ? ?靜態(tài)成員變量存在的意義是實(shí)現(xiàn)數(shù)據(jù)的共享。
? ? ? ? ? ? ? ? ? ? ?在靜態(tài)成員函數(shù)內(nèi)部可以聲明靜態(tài)變量,注意不是靜態(tài)成員變量。如果在靜態(tài)成員函數(shù)內(nèi)部聲明一個(gè)靜態(tài)變量,則該類的所有對(duì)象將共享這個(gè)變量。
靜態(tài)成員變量
靜態(tài)成員變量屬于類而不屬于任何一個(gè)對(duì)象,如此一來可以實(shí)現(xiàn)數(shù)據(jù)共享功能。靜態(tài)成員變量不會(huì)影響類及其對(duì)象的大小,也即sizeof結(jié)果不會(huì)受到影響。
靜態(tài)成員變量如果被設(shè)置為private或protected屬性,則在類外同樣無法訪問,但定義該變量的時(shí)候卻不受此限制,如例2所示,雖然靜態(tài)成員變量count為private屬性,但是它在類外定義的時(shí)候不受private限制。
class student { public:student(){count ++;}~student(){count --;} private:static int count;//其它成員變量 }; int student::count = 0;//靜態(tài)成員變量可以在外部用類名加上域解析符“::”加上變量名的形式定義靜態(tài)成員函數(shù)
靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量,而不能訪問非靜態(tài)成員變量。普通成員函數(shù)(包括構(gòu)造函數(shù)和析構(gòu)函數(shù))既可以訪問普通成員變量,同時(shí)又可以訪問靜態(tài)成員變量。
#include<iostream> using namespace std;class test { public:test(int a, int b){num = a; plus = b;}static int getnum(){return num;}static int add(){return num+plus;} //compile errorvoid setnum(int a){num = a;}void setplus(int a){plus = a;} private:static int num;int plus; }; int test::num = 1;int main() {test one;one.setnum(5);cout<<test::getnum()<<endl;return 0; }訪問靜態(tài)成員變量和靜態(tài)成員函數(shù)均有兩種方式,其一是和普通的成員變量成員函數(shù)相同,通過對(duì)象來訪問,其二則是可以通過類名加上域解析操作符訪問。當(dāng)然訪問過程中仍然要遵循private、protected和public關(guān)鍵字的訪問權(quán)限限定。訪問靜態(tài)成員變量和靜態(tài)成員函數(shù)首選的方法是通過類來訪問,畢竟靜態(tài)成員變量和靜態(tài)成員函數(shù)都是屬于類的,與類相關(guān)聯(lián),而不是屬于類的對(duì)象。普通成員變量或成員函數(shù)不可以通過類來訪問。由于靜態(tài)成員變量和靜態(tài)成員函數(shù)都是屬于類,而不是屬于對(duì)象,因此靜態(tài)成員函數(shù)內(nèi)部也不存在this指針,因?yàn)殪o態(tài)成員函數(shù)不屬于對(duì)象。
在靜態(tài)成員函數(shù)內(nèi)部可以聲明靜態(tài)變量,注意不是靜態(tài)成員變量。如果在靜態(tài)成員函數(shù)內(nèi)部聲明一個(gè)靜態(tài)變量,則該類的所有對(duì)象將共享這個(gè)變量。
?
程序運(yùn)行結(jié)果:
5 5
9 4
20 11
?
總結(jié)
以上是生活随笔為你收集整理的C++类与static关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++类与const关键字
- 下一篇: C的面向对象化