作用:
1.修飾普通變量洲敢,修改變量的存儲區(qū)域和生命周期败玉,使變量存儲在靜態(tài)區(qū)蛀恩,在main函數(shù)運行前就分配了空間疫铜,如果有初始值就用初始值初始化它,如果沒有初始值就用默認初始化值双谆;
2.修飾普通函數(shù)壳咕,表明函數(shù)的作用范圍,僅在定義該函數(shù)的文件內(nèi)才能使用顽馋。在多人開發(fā)項目時谓厘,為了防止與他人命名函數(shù)重名,可以將函數(shù)聲明為static寸谜;
3.修飾成員變量竟稳,修飾成員變量是所有的對象只保存一個變量,而且不需要生成對象就可以訪問該成員,static類成員不像普通的類數(shù)據(jù)成員他爸,static類數(shù)據(jù)成員獨立于一切類對象存在聂宾。static類數(shù)據(jù)成員是與類關(guān)聯(lián)的,但不與該類定義的對象有任何關(guān)系诊笤,就是static不會像普通類數(shù)據(jù)成員一樣每一個類對象都有一份系谐,全部類對象是共享一個static類成員的,例如A類對象修改了static成員為1盏混,那么B對象對應(yīng)的static類對象成員的值也會是1.;
4.修飾成員函數(shù)惜论,修飾成員函數(shù)使得不需要生成對象就可以訪問該函數(shù)许赃,但是在static函數(shù)內(nèi)不能訪問非靜態(tài)成員。
5.在使用static變量時馆类,就和使用普通的全局變量一樣混聊,區(qū)別只是要在變量名前加上類范圍符的前綴::。
6.static修飾的變量先于對象存在乾巧,所以static修飾的變量要在類外初始化句喜。因為static是所有對象共享的,必須要比對象先存在沟于。
好處:
用static修飾的成員變量在對象中是不占內(nèi)存的咳胃,因為他不是跟對象一起在堆或者棧中生成,用static修飾的變量在靜態(tài)存儲區(qū)生成的旷太,所以static修飾可以節(jié)省對象的內(nèi)存空間展懈。例如,創(chuàng)建多個object對象供璧,而他們都有共有的一個變量存崖。
#include<iostream>
using namespace std;
class object
{
public:
????static int number;//聲明static變量
????int val;
????static void test()? //修飾成員函數(shù)
????{
????????//cout << val << endl;報錯,不能訪問非靜態(tài)成員
????????cout << number << endl;
????????printf("這是靜態(tài)成員函數(shù)\n");
????}
};
int object::number = 1;//類外初始化睡毒,不需要生成對象就可以訪問該變量
int main()
{
? ? ?cout << object::number << endl;
? ? ?//int object::number = 1;報錯来惧,只能在類外初始化
????//object::val = 2;報錯,無對象不能訪問val
????object::test();//不需要生成對象就可以訪問該成員函數(shù)
????return 0;
}