[英]How to access a non-static member from a static member function in C++?
我寫了以下代碼:
class A
{
public:
int cnt;
static void inc(){
d.cnt=0;
}
};
int main()
{
A d;
return 0;
}
我已經看到了這個問題:
但是我不想使用指針。 我可以不使用指針就能做到嗎?
編輯:
我已經看到以下問題:
我為什么不能做這樣的事情?
不,如果沒有指向對象實例的指針,就無法從靜態函數調用非靜態成員函數。 否則編譯器將如何知道在哪個對象上調用該函數?
就像其他人指出的那樣,您需要訪問對象才能對其執行操作,包括訪問其成員變量。
從技術上講,您可以像下面的我的zeroBad()
函數那樣編寫代碼。 但是,由於仍然需要訪問該對象,因此也可以使其成為成員函數,例如zeroGood()
:
class A
{
int count;
public:
A() : count(42) {}
// Zero someone else
static void zeroBad(A& other) {
other.count = 0;
}
// Zero myself
void zeroGood() {
count = 0;
}
};
int main()
{
A a;
A::zeroBad(a); // You don't really want to do this
a.zeroGood(); // You want this
}
您也可以在C ++中實現Singleton
模式。 除非您有非常具體的原因,否則您可能不想這樣做。 例如,由於很難測試,因此Singleton被許多人視為反模式 。 如果您發現自己想要這樣做,則重構程序或重新設計可能是最好的解決方案。
如果不使用指針,則不能在靜態函數內使用非靜態成員變量或函數。
本身並不需要指針,但是確實需要訪問通過其訪問非靜態變量的對象。 在您的示例中,對象d對A :: inc()不可見。 如果d是main的全局變量而不是局部變量,那么您的示例將起作用。
就是說,很好奇為什么您要花大力氣避免在C ++中使用指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.