static在c中可修飾全局變量,局部變量,函數。在這三方面,c++中的static作用與c一致。
但是在c++中,多了叫類的語法,static可以修改類中的成員變量和成員函數。
當static修飾c++中類的成員變量時,該成員變量屬於該類,初始化在類外面進行,且必須初始化。
class A{
public :
static int b;//聲明一個靜態的成員變量
private:
int a ;
}
int A::b=10;//初始化static靜態成員變量
//b保存在內存全局data區,sizeof(A)時,不會包含靜態成員變量b,大小爲4
//==============================================================
//==============================================================
struct B{
int a;
static int b;//聲明一個靜態的結構體變量
}
//sizeof(B)時,不會包含變量b,大小爲4
修改c++中類的static成員變量時,直接修改,A::b=20;
1,static 成員變量實現了同類對象間信息共享。
2,static 成員類外存儲,求類大小,並不包含在內。
3,static 成員是命名空間屬於類的全局變量,存儲在 data 區。
4,static 成員只能類外初始化。
5,可以通過類名訪問(無對象生成時亦可),也可以通過對象訪問。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class AA
{
public:
AA(int a, int b)
{
m_a = a;
m_b = b;
}
int getC()
{
cout << "c = " << m_c << endl;
m_c++;
return m_c;
}
static int m_c;//靜態的成員變量 //1 在類的內部聲明這個變量 用static
//靜態的成員變量是對本來共享,所有本類中的對象 都是公用一個內存區域
private:
int m_a;
int m_b;
};
//2 靜態成員變量的初始化, 在類的外部去寫
int AA::m_c = 0;
int main(void)
{
AA aa1(10, 20), aa2(100,200), aa3(1000,2000);
aa1.getC();
aa2.getC();
aa3.getC();
//怎麼去修改一個靜態的成員變量
AA::m_c = 200;
aa1.getC();
aa2.getC();
aa3.getC();
return 0;
}