一、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;
}
![ElementPlusError 解决: [ElForm] model is required for validate to work 的三种方式](https://img-blog.csdnimg.cn/b5616ca9dd2645d48a80860ed282f258.png)


















