一 static的使用 (作用域和存儲方式)
1.作用域---------->隱藏
靜態函數跟靜態全局變量的作用類似 (靜態函數不能被其它文件所用; 其它文件中可以定義相同名字的函數,不會發生沖突)
int a = 10;
void add()
{
static int a=0; //對該函數進行隱藏,只作用於該函數內,這個函數只執行一次,下次就不會再給a 進行賦值操作
printf("a = %d",a);
}
int main()
{
` a++;
add();
printf("a = %d",a);
}
結果 : a=0 a=10;
函數(static 里面不包含this指針)
a.靜態函數只能訪問靜態成員變量(不需要this指針)
b.靜態函數不能訪問普通成員函數,反之成立(靜態成員函數沒有this指針)
2. 存儲方式-------------->共有的(它的值會被保存,下次調用仍保持上一次數值)
a.局部變量 : 在該函數執行變量結束后,該變量不會被釋放,繼續保存
b.全局變量 : 表示當變量在全局內都可以訪問
c.類成員變量 : 表示這個變量為全類所有的(所有對象都公用這個變量,它不是某一個對象的私有的)
二 const的使用 (只具有讀的工能)
- const 常量:定義時就初始化,以后不能更改。
- const 形參:func(const int a){};該形參在函數里不能改變
- const修飾類成員函數:該函數對成員變量只能進行只讀操作
- 可以作為重載函數 void func(Test * const this(默認的)) const ---------=>void func(const Test * const this):這個函數只具有讀的功能,不能對對其變量進行修改
因為this指針為常量,不能變化,它和static成員函數類似,普通函數可以訪問常成員函數,反之則不成立.常成員函數只能訪問常成員變量
三 不同點
static : 為靜態變量,只和類有關系,和對象無關,即使沒有對象也可以調用靜態函數和變量.
數據類型 類名::靜態數據成員名=值 int Test::a = 10;
const : 初始化必須有構造函數初始化,不同對象const的數值不一樣.