声明静态成员变量:在类的声明中,使用static
关键字来声明静态成员变量。静态成员变量在类的所有对象之间共享。
class MyClass {
public:
static int staticVar; // 静态成员变量的声明
};
定义静态成员变量:在类外部,需要定义和初始化静态成员变量。通常在类名后面使用作用域解析运算符::
来定义它。
int MyClass::staticVar = 0; // 静态成员变量的定义和初始化
声明静态成员函数:在类的声明中,使用static
关键字来声明静态成员函数。静态成员函数不操作特定对象实例,只能访问静态成员变量和其他静态成员函数。
class MyClass {
public:
static void staticFunction(); // 静态成员函数的声明
};
定义静态成员函数:在类外部,定义静态成员函数,同样要使用类名和作用域解析运算符::
。
void MyClass::staticFunction() {
// 静态成员函数的定义
}
静态成员变量和静态成员函数可以通过类名和作用域解析运算符来访问,而不需要创建类的对象实例。
int main() {
// 访问静态成员变量
MyClass::staticVar = 42;
// 调用静态成员函数
MyClass::staticFunction();
return 0;
}
需要注意的是,静态成员函数没有访问非静态(普通)成员变量或函数的权限,因为它们没有访问特定对象的上下文。静态成员函数通常用于执行与类相关的操作,而不是特定对象的操作。
下面是一个完整的程序:
#include <iostream>
using namespace std;
class myclass
{
public:
static int staticvar ; //声明静态成员变量
static void staticfunction();//声明静态成员函数
void nonstaticfunction()//声明普通成员函数
{
cout << "普通成员函数" << endl;
}
};
int myclass::staticvar = 0;
void myclass::staticfunction()
{
cout << "静态成员函数" << endl;
}
int main()
{
myclass s1;//创建对象s1
s1.nonstaticfunction();//普通成员函数的调用;
myclass::staticfunction();//通过类名调用静态成员函数
s1.staticfunction();//通过对象调用静态成员函数
myclass::staticvar = 45;//通过类名访问静态成员函数
cout << myclass::staticvar << endl;
s1.staticvar = 40;//通过对象访问静态成员变量
cout << s1.staticvar << endl;
return 0;
}