一、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;
}