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