在类定义内使用 static
关键字修饰成员函数有特殊的含义,它表示这是一个静态成员函数。
静态成员函数的特点
1. 不依赖于类的实例
class MyClass {
public:
static void staticFunc() { } // 静态函数
void normalFunc() { } // 普通成员函数
};
// 使用方式
MyClass::staticFunc(); // ✅ 直接通过类名调用,无需创建对象
MyClass obj;
obj.normalFunc(); // ✅ 需要通过对象调用
MyClass::normalFunc(); // ❌ 错误!普通成员函数不能这样调用
2. 没有 this 指针
class Calculator {
public:
static int add(int a, int b) {
// 这里没有 this 指针,不能访问非静态成员
return a + b;
}
int multiply(int a, int b) {
return a * b;
// 这里隐式有 this 指针
}
};
3. 只能访问静态成员
class NetworkParser {
private:
static int packetCount; // 静态成员变量
int instanceData; // 普通成员变量
public:
static void parsePacket() {
packetCount++; // ✅ 可以访问静态成员
// instanceData = 10; // ❌ 错误!不能访问非静态成员
}
void normalMethod() {
packetCount++; // ✅ 可以访问静态成员
instanceData = 10; // ✅ 可以访问非静态成员
}
};
// 静态成员变量需要在类外定义
int NetworkParser::packetCount = 0;