我有這個問題,因爲單例/命名構造函數。在這兩種情況下,真正的構造函數都是受保護的或私有的,都不能從外部訪問。靜態方法可以訪問同一個類的私有方法嗎?
例如,短命名構造是這樣的:
class A
{
public:
static A createA() { return A(0); } // named constructor
private:
A (int x);
};
int main(void)
{
A a = A::createA();
}
我認爲靜態方法只能通過現有對象訪問靜態數據成員,或者訪問專用數據/方法。 但是,在上面的代碼中,私有構造函數A()
不是靜態的,在調用它時,也不存在任何對象。 所以我能想到的唯一解釋是靜態方法可以訪問同一類的非靜態私有方法。任何人都可以請肯定或否定我的想法,可能有一些解釋?
我很抱歉,如果這太微不足道了,但關鍵詞太常見了,我無法在數十個谷歌網頁上找到答案。提前致謝。
DR; TL;是的,它可以。 – 101010
我假設你犯了一個錯字,意思是「所以我能想到的唯一解釋是靜態方法可以訪問同一類的非靜態私有方法」而不是「... * static * ...」 –
謝謝!你有一些我可以看的參考嗎? –