C++類中靜態變量和普通變量的區別


靜態變量:

1.靜態變量會被編到程序的exe里面,從程序啟動到結束,它一直存在;

2.靜態變量的初始化值為0;

3.全局變量默認是靜態變量;

4.在類中的函數變量前面加了static的也是靜態變量,只不過被語言限定在只能在函數內部使用;

5.在有MFC對話框的程序了,如果一個變量和對話框綁定,那么該變量就不能聲明為靜態變量,函數也是一樣的,因為聲明為靜態變量后不能隨時接受對話框內的值,    主要是因為靜態變量的值設置后是不能被修改的;

6.可以使用類名+靜態成員名訪問此靜態成員,因為靜態成員存在於內存,非靜態成員需要實例化才會分配內存,所以靜態成員不能訪問非靜態成員,因為靜態成員存    在於內存,所以非靜態成員可以直接訪問類中的靜態成員;

7.在類的內部變量前面加static,則將此變量聲明為靜態成員變量,無論這個類的對象定義了多少個,靜態數據成員在程序中也只有一份拷貝,由該類型的所有對象共    享訪問。即靜態數據成員是該類的所有對象所共有的。對該類的多個對象來說,靜態數據成員只分配一次內存,供所有對象共用。所以,靜態數據成員的值對每個對    象都是一樣的,它的值可以更新;

8.類中靜態變量的初始化形式為:<數據類型><類名>::<靜態數據成員> = <值>;

9.靜態數據成員和普通數據成員一樣遵從public、private、protected訪問規則,如果靜態數據成員的訪問權限允許的話,即為public成員,可在程序中,按上述格     式來引用靜態數據成員;

10.同全局變量相比,使用靜態數據成員有兩個優勢:

(1)靜態數據成員沒有進入程序的全局名字空間,因此不存在與程序中其他全局名字沖突的可能性;

(2)可以實現信息隱藏。靜態數據成員可以使private成員,而全局變量不能。

11.對於類內部的靜態成員函數是不具備this指針的,而非靜態函數都會有一個指向類的對象本身的一個this指針,靜態成員函數無法訪問屬於類對象的非靜態數據成     員,也無法訪問非靜態成員函數,它只能調用其余的靜態成員函數。

非靜態變量:

1.非靜態變量只是在函數被調用的時候非配到棧里面的,函數調用結束后,該變量也就被銷毀了;

2.非靜態變量的值是可以改變的。

3.當類被實例化后,可以通過實例化的類名進行訪問,非靜態成員的生存期決定於該類的生存期,而靜態成員則不存在生存期的概念,因為靜態成員始終駐留在內存 中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM