乙個靜態成員函式不與任何物件相聯絡,故不能對非靜態成員進行預設訪問。
它們的根本區別在於靜態成員函式沒有this指標,而非靜態成員函式有乙個指向當前物件的指標this。
例如:
1函式nsfn()可被認為它宣告為void sc::nsfn(sc* this , int a)。對nsfn()的呼叫,編譯像註解的那樣進行轉換,s的位址作為第乙個傳遞的引數。(你並不實際寫該呼叫,由編譯來實現。)classsc2
;89void f(sc &s)
10
在函式內部,sc::nsfn()對非靜態成員的訪問將自動把this引數作為指向當前物件的指標。而當sc::sfn()被呼叫時,沒有任何物件的位址被傳遞。因此,當訪問非靜態成員時,無this指標出錯。這就是為什麼乙個靜態成員函式與任何當前物件都無聯絡的原因。
靜態成員函式和非靜態成員函式的區別?
乙個靜態成員函式不與任何物件相聯絡,故不能對非靜態成員進行預設訪問。它們的根本區別在於靜態成員函式沒有this指標,而非靜態成員函式有乙個指向當前物件的指標this。例如 1 classsc2 89void f sc s 10 函式nsfn 可被認為它宣告為void sc nsfn sc this ...
靜態成員函式與非靜態成員函式的區別
先放上幾個小例子 1 static 修飾成員變數 靜態變數,是在編譯階段就分配空間,物件還沒有建立時,就已經分配空間。靜態成員變數必須在類中宣告,在類外定義。靜態資料成員不屬於某個物件,在為物件分配空間中不包括靜態成員所佔空間。class data 定義的時候 不需要加static int data...
C 靜態成員函式訪問非靜態成員
如果類沒有被建立,則沒有對應的成員,也就無法訪問 下面這種方法需要先建立類,並將類作為引數傳遞給靜態成員函式才能訪問。include using namespace std class person class student public person static void get age st...