🌈個人主頁:羽晨同學?
💫個人格言:“成為自己未來的主人~”??
概念
聲明為static的類成員稱為類的靜態成員,用static修飾的成員變量,稱之為靜態成員變量,用static修飾的成員函數,稱之為靜態成員函數,靜態成員變量一定要在類外進行初始化。
我們來看下面的這一段代碼,思考一下,程序中創建出了多少個類對象。
#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}static int GetAcount(){//this->return _scount;}
private:
// int _a1 = 1;
// int _a2 = 2;
//public:static int _scount;
};
int A::_scount = 0;
void TestA()
{cout << A::GetAcount() <<endl;A a1, a2;A a3(a1);cout << A::GetAcount() << endl;
}
int main()
{TestA();return 0;
}
?在上面的這段代碼當中,我們可以獲取到下面的幾個知識點
- 靜態成員變量必須在類外定義,定義時不添加static關鍵字,類中只是聲明
- 類靜態成員即可用類名::靜態成員或者對象.靜態成員來訪問。
- 靜態成員函數沒有隱藏的this指針, 不能訪問任何非靜態成員
- 靜態成員也是類的成員,受到public,protected,private等訪問限定符的約束。
我們再來看下面的這段代碼:
#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;}A(const A& t){++_scount;}static int GetAcount(){//this->return _scount;}
private:int _a1 = 1;int _a2 = 2;
//public:static int _scount;
};
int A::_scount = 0;
void TestA()
{cout << A::GetAcount() <<endl;A a1, a2;A a3(a1);cout << A::GetAcount() << endl;
}
int main()
{A aa1;cout << sizeof(aa1) << endl;return 0;
}
?
我們可以看到,類的大小是4個字節,這個說明了什么呢?
說明靜態成員為所有類對象所共享,不屬于某個具體的對象,存放在靜態區。
?