1,靜態局部變量,在全局區分配內存,生命週期是整個程序運行時間,作用域是該局部作用域
//static int a = 10; 把a變成一個狀態變量
//a初始化的時候10 ,只初始化一次,之後static int a = 10;不再執行
//a = 11
int& mygg()
{
static int a = 10;
printf("a:%d", a);
return a;
}
int main03()
{
mygg() = 11;
mygg();
system("pause");
return 0;
}
運行結果:a=10,a=11;
2,當static修飾某方法,則該方法只能在該.c文件中使用,在別的文件無法使用extern 無法使用
//這個函數myprintf只能在這個c中被使用
static void myprintf()
{
printf("鋤禾日當午,生活真是苦");
printf("很好很好");
}
3,當static修飾類成員時,該靜態成員局部於類,不屬於某個對象,不論創建多少個對象,該成員數據共享,static成員應拿出類外面初始化
class Test3
{
public:
Test3(int a, int b)
{
m_a = a;
m_b = b;
cout<<m_a<<endl;
count ++;
cout<<"構造執行"<<endl;
}
~Test3()
{
cout<<"析構執行"<<endl;
}
static int getCount()
{
return count;
}
protected:
private:
int m_a; //屬於具體的對象
int m_b;
//static修飾的變量或者函數,屬於這個類,不屬於具體的對象
static int count;
};
int Test3::count = 0;
void main()
{
Test3 t1(1, 3), t2(3, 4), t3(5, 65);
//可以通過類::靜態方法或者對象直接調用
cout<<Test3::getCount()<<endl;;
cout<<t3.getCount()<<endl;;
system("pause");
}
注:普通方法可以引用靜態數據,而靜態方法不可以使用普通成員