静态成员函数调用方式
静态成员函数属于类本身,而不是类的某个对象实例。它们不能访问非静态成员变量和非静态成员函数。
1. 定义和调用静态成员函数
#include <iostream>
class MyClass {
public:
static void myStaticFunction
()
{
std::cout << "MyClass::myStaticFunction" << std::endl;
}
};
int main() {
// 通过类名调用静态成员函数
MyClass::myStaticFunction();
// 通过对象实例调用静态成员函数
MyClass obj;
obj.myStaticFunction();
// 通过指针调用静态成员函数
MyClass* pObj = &obj;
pObj->myStaticFunction();
// 通过引用调用静态成员函数
MyClass& refObj = obj;
refObj.myStaticFunction();
return 0;
}
2. 静态成员函数的特点
- 静态成员函数没有
this
指针,这是最重要的一点。 - 无法直接存取类中普通的非静态成员变量。
- 静态成员函数不能在末尾增加
const
后缀,也不能设置virtual
。 - 可以使用类对象来调用,但不要求一定要用类对象来调用。
- 静态成员函数等同于全局函数(非成员函数),所以一般提供回调函数的场合,可以将这种函数提供为回调函数。
3. 静态成员函数作为回调函数
静态成员函数等同于全局函数(非成员函数),所以一般提供回调函数的场合,可以将这种函数提供为回调函数。这是因为静态成员函数不依赖于类的实例,可以直接通过类名调用,类似于全局函数。
示例代码
以下是一个示例,展示如何将静态成员函数作为回调函数使用:
#include <iostream>
// 回调函数类型
typedef void (*CallbackFunction)();
class MyClass {
public:
static void myStaticFunction() {
std::cout << "MyClass::myStaticFunction" << std::endl;
}
};
// 一个接受回调函数的函数
void registerCallback(CallbackFunction callback) {
// 调用回调函数
callback();
}
int main() {
// 将静态成员函数作为回调函数传递
registerCallback(MyClass::myStaticFunction);
return 0;
}
解释
- 定义回调函数类型:
typedef void (*CallbackFunction)();
定义了一个回调函数类型。 - 静态成员函数:
MyClass::myStaticFunction
是一个静态成员函数,可以直接通过类名调用。 - 注册回调函数:
registerCallback(MyClass::myStaticFunction);
将静态成员函数作为回调函数传递给registerCallback
函数。 - 调用回调函数:在
registerCallback
函数内部,调用传递进来的回调函数。