C++ 靜態(tài)成員函數(shù)可以訪問非靜態(tài)成員,但需要使用類名或?qū)ο髮嵗齺碚{(diào)用。這是因為靜態(tài)成員函數(shù)與類本身關聯(lián),而非靜態(tài)成員函數(shù)與類的實例關聯(lián)。
以下是一個示例:
#include <iostream>
using namespace std;
class MyClass {
public:
static void staticFunction(MyClass &obj) {
cout << "Inside static function" << endl;
obj.nonStaticMember = 42; // 訪問非靜態(tài)成員
}
void nonStaticFunction() {
cout << "Inside non-static function" << endl;
}
private:
int nonStaticMember = 0;
};
int main() {
MyClass obj;
MyClass::staticFunction(obj); // 使用類名和對象實例調(diào)用靜態(tài)成員函數(shù)
obj.nonStaticFunction(); // 調(diào)用非靜態(tài)成員函數(shù)
return 0;
}
在這個示例中,staticFunction
是一個靜態(tài)成員函數(shù),它接受一個 MyClass
類型的引用作為參數(shù)。在靜態(tài)成員函數(shù)內(nèi)部,我們可以訪問非靜態(tài)成員 nonStaticMember
。要調(diào)用靜態(tài)成員函數(shù),我們只需使用類名即可,如 MyClass::staticFunction(obj)
。要調(diào)用非靜態(tài)成員函數(shù),我們需要創(chuàng)建類的實例,如 obj.nonStaticFunction()
。