static靜態(tài)函數(shù) 類的靜態(tài)成員函數(shù)可以直接訪問該類的靜態(tài)成員和非靜態(tài)成員,那非靜態(tài)成員函數(shù)都可以訪問什么?
類的靜態(tài)成員函數(shù)可以直接訪問該類的靜態(tài)成員和非靜態(tài)成員,那非靜態(tài)成員函數(shù)都可以訪問什么?相反,應(yīng)該是“類的非靜態(tài)成員函數(shù)可以直接訪問類的靜態(tài)和非靜態(tài)成員”,靜態(tài)成員函數(shù)只能訪問類的靜態(tài)成員。靜態(tài)成員函
類的靜態(tài)成員函數(shù)可以直接訪問該類的靜態(tài)成員和非靜態(tài)成員,那非靜態(tài)成員函數(shù)都可以訪問什么?
相反,應(yīng)該是“類的非靜態(tài)成員函數(shù)可以直接訪問類的靜態(tài)和非靜態(tài)成員”,靜態(tài)成員函數(shù)只能訪問類的靜態(tài)成員。
靜態(tài)成員函數(shù)為什么不能訪問本類中的非靜態(tài)成員?
程序最終將在內(nèi)存中執(zhí)行,只有當(dāng)變量占據(jù)內(nèi)存中的某個位置時才能訪問它們。類的靜態(tài)成員(變量和方法)屬于類本身,在加載類時會分配內(nèi)存,可以通過類名直接訪問內(nèi)存。非靜態(tài)成員(變量和方法)屬于類對象,因此只有在生成類對象(創(chuàng)建類實例)然后通過類對象(實例)訪問時才會分配內(nèi)存。在靜態(tài)成員中訪問類的非靜態(tài)成員時出錯的原因是,當(dāng)該類的非靜態(tài)成員不存在時,該類的靜態(tài)成員已經(jīng)存在。當(dāng)然,訪問內(nèi)存中不存在的東西時會出錯:類ca{私人:INTA//非靜態(tài)成員,創(chuàng)建類實例時分配內(nèi)存,不同的類實例對應(yīng)不同的內(nèi)存區(qū)域
classA{公眾:staticintnumberfriendvoidhanshu()}void Hanshu(){cout<<A::number}inta::number=456//請注意,在初始化靜態(tài)成員intmain(){aahanshu()系統(tǒng)(“pause”)時有一個錯誤。}還請注意,不能使用友元函數(shù)訪問所有成員,這種理解是錯誤的,正確的理解是friend函數(shù)可以通過類的對象訪問類的所有成員,而friend函數(shù)不能直接訪問類的私有成員,如類a{I}公眾:friendvoidf()}void f(){a=1}//這將導(dǎo)致錯誤。它只能通過類的對象訪問,比如void f(){Amama。A=1}//這是正確的。如果f不是朋友,那么ma。A是錯誤的。