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