一、c++静态成员变量
在C++中,静态成员变量(Static Member Variable)是类的一种特殊类型的成员变量,它被类的所有实例共享,而不是每个实例都有自己的副本。静态成员变量在类的所有对象之间保持唯一的状态,具有一些特殊的用途和语法。
1、概念:
静态成员变量是类的成员变量,但不是依赖于类的实例而存在的。它在类的所有实例之间共享相同的内存位置,因此在类的所有对象之间保持唯一的状态。
静态成员变量在类的声明中使用static关键字来定义,并在类的实现文件中进行初始化(换句话说就是不能在类中进行初始化)。
2、使用方法:
①、声明静态成员变量:
在类的声明中,使用static关键字声明静态成员变量。声明通常在类的public、private或protected部分。
②、初始化静态成员变量:(不能在类里面进行初始化)
静态成员变量需要在类的实现文件中进行初始化。在类外部,使用类名和作用域解析操作符::来初始化静态成员变量。
③、访问静态成员变量:
静态成员变量不属于类的实例,因此可以使用类名和作用域解析操作符来访问,也可以在类的成员函数中通过this指针访问。
案例:
#include <iostream>
using namespace std;
class MyClass {public:/**声明静态成员变量*静态成员变量在编译阶段就已经分配了内存,存在全局静态区*/static int staticVar;MyClass() {// 在构造函数中修改静态成员变量staticVar++;}// 静态成员函数,用于访问静态成员变量static void printStaticVar() {cout << "Static variable value: " << staticVar << endl;}
};// 初始化静态成员变量
int MyClass::staticVar = 0;//在类外初始化int main() {MyClass obj1;MyClass::printStaticVar(); // 访问静态成员变量MyClass obj2;MyClass::printStaticVar(); // 访问静态成员变量return 0;
}
3、总结
①静态成员变量在内存中只有一份,多个对象共享一个静态变量
②静态成员变量,必须类内声明,类外定义
③静态成员变量可以通过类的作用域访问
④静态成员变量可以通过类的对象访问
二、静态成员函数
1、概念:
静态成员函数(Static Member Function):
静态成员函数是不依赖于类的实例的成员函数。它们可以通过类名和作用域解析操作符::直接访问。静态成员函数不能访问非静态成员变量,也不能使用this指针。
2、特点:
①静态成员函数能访问静态成员变量不能访问普通的成员变量
②可以通过类的作用域访问静态成员函数
③可以通过对象访问静态成员函数
案例代码
#include <iostream>
using namespace std;
class MyClass {private:int regularVar; // 普通成员变量static int staticVar; // 静态成员变量public:MyClass(int regValue, int statValue) : regularVar(regValue) {staticVar = statValue;}static void staticFunction() {// 静态成员函数可以访问静态成员变量,但不能访问普通成员变量cout << "Static member function accessing staticVar: " << staticVar<< endl;// 下面一行会引发编译错误,因为静态函数不能访问普通成员变量// cout << "Static member function accessing regularVar: " <<// regularVar << endl;}void regularFunction() {cout << "Regular member function accessing regularVar: " << regularVar<< endl;}
};// 初始化静态成员变量
int MyClass::staticVar = 0;int main() {// 使用类的作用域访问静态成员函数MyClass::staticFunction();MyClass obj(42, 100);obj.regularFunction();// 通过对象访问静态成员函数obj.staticFunction(); // 也可以通过对象访问,但是不推荐,最好使用类名访问return 0;
}
三、const修饰的静态成员变量
①const修饰的静态成员变量保存在常量区,只读的,在内存中只有一份
②const修饰的静态成员变量可以在类内定义且初始化
③const修饰的静态成员变量可以通过类的作用域访问
④const修饰的静态成员变量可以通过对象访问
⑤静态成员函数可以访问const修饰的静态成员变量
代码案例:
#include <iostream>
using namespace std;class MyClass {public:// 在类内部定义且初始化带有const修饰的静态成员变量static const int staticConstVar = 42;static void printStaticConstVar() {// 静态成员函数可以访问const修饰的静态成员变量cout << "Static const variable value: " << staticConstVar << endl;}
};int main() {// 通过类的作用域访问const修饰的静态成员变量cout << "Accessing via class scope: " << MyClass::staticConstVar << endl;// 通过对象访问const修饰的静态成员变量MyClass obj;cout << "Accessing via object: " << obj.staticConstVar << endl;// 调用静态成员函数,访问const修饰的静态成员变量MyClass::printStaticConstVar();return 0;
}