📜  如何在 C++ 中初始化类的静态成员变量(1)

📅  最后修改于: 2023-12-03 15:24:08.216000             🧑  作者: Mango

如何在 C++ 中初始化类的静态成员变量

在 C++ 中,静态成员变量是类的所有实例共享的成员变量。类的静态成员变量必须在类外部初始化,否则会导致链接错误。下面将介绍如何在 C++ 中初始化类的静态成员变量。

1. 在类外部初始化静态成员变量
// MyClass.h
class MyClass{
public:
    static int num;
};
// MyClass.cpp
#include "MyClass.h"
int MyClass::num = 0; // 初始化静态成员变量
2. 使用构造函数初始化静态成员变量
// MyClass.h
class MyClass{
public:
    static int num;
    MyClass();
};

// MyClass.cpp
#include "MyClass.h"
MyClass::MyClass(){
    num = 0; // 使用构造函数初始化静态成员变量
}

需要注意的是,如果类的静态成员变量是一个指针或者一个对象,一定要在构造函数中对其进行动态分配或者初始化,否则可能会导致意外的错误。

3. 使用静态类成员函数初始化静态成员变量
// MyClass.h
class MyClass{
public:
    static int num;
    static void initNum();
};

// MyClass.cpp
#include "MyClass.h"
void MyClass::initNum(){
    num = 0; // 使用静态类成员函数初始化静态成员变量
}

使用静态类成员函数初始化静态成员变量比使用构造函数更加灵活,可以根据具体情况选择不同的初始化方式。需要注意的是,静态类成员函数中只能访问静态成员变量。

4. 使用类模板初始化静态成员变量
// MyClass.h
template <typename T>
class MyClass{
public:
    static T num;
};

// MyClass.cpp
#include "MyClass.h"
template<typename T>
T MyClass<T>::num = 0; // 使用类模板初始化静态成员变量

以上是在 C++ 中初始化类的静态成员变量的几种方式,需要根据具体情况选择最适合的方式。在初始化静态成员变量时,一定要注意避免链接错误的发生。