C++

C++ 知识量:19 - 82 - 316

7.4 类的静态成员><

声明和定义静态成员- 7.4.1 -

在C++中,静态成员是类的所有对象共享的成员。它们在类定义中声明,并在类外部定义。静态成员变量只能存储静态数据,对于任何非静态成员函数,它们都可以访问静态成员变量。

以下是一个声明和定义静态成员的例子:

class MyClass {  
public:  
    static int staticVar;  // 声明静态成员变量  
    static void staticFunc() {  // 声明静态成员函数  
        // ...  
    }  
};  
  
// 在类外部定义静态成员变量  
int MyClass::staticVar = 0;

注意,静态成员变量必须在类外部进行定义,因为它们需要一个存储空间,而这个存储空间不能在类的内部定义。对于静态成员函数,它们通常在类内部声明,但在类外部定义。

使用类的静态成员- 7.4.2 -

在C++中,类的静态成员可以是数据成员(变量)或函数成员(方法)。静态成员在整个程序中只有一个实例,且不属于任何特定对象,它们在类定义之外的任何地方都可以访问。

以下是如何声明和使用类的静态成员的例子:

class MyClass {  
public:  
    static int staticVar;  // 声明静态成员变量  
  
    static void staticFunc() {  // 声明静态成员函数  
        std::cout << "This is a static function." << std::endl;  
    }  
};  
  
// 在类外部定义静态成员变量  
int MyClass::staticVar = 0;

使用静态成员的方式如下:

int main() {  
    // 访问静态成员变量  
    MyClass::staticVar = 10;  
    std::cout << MyClass::staticVar << std::endl;  
  
    // 访问静态成员函数  
    MyClass::staticFunc();  
  
    return 0;  
}

静态成员变量可以在类内部初始化,但必须是在类定义中进行的。在类定义外部,需要在类名后面加上作用域解析运算符(::)来访问静态成员变量或静态成员函数。

静态成员的类内初始化- 7.4.3 -

在C++中,静态成员的初始化可以在类的内部进行,也可以在类的外部进行。

对于静态成员变量,如果它们是基础类型(例如int、float、char等),可以直接在类内部进行初始化。例如:

class MyClass {  
public:  
    static int staticVar = 0;  // 在类内初始化静态成员变量  
};

如果静态成员变量是复杂类型(例如数组、结构体或其他类的对象),则不能在类内进行初始化,而需要在类外进行初始化。例如:

class MyClass {  
public:  
    static std::vector<int> staticVec;  // 声明静态成员变量  
};  
  
// 在类外部定义并初始化静态成员变量  
std::vector<int> MyClass::staticVec = {1, 2, 3};

对于静态成员函数,它们不能在类内进行初始化,而需要在类外进行定义。静态成员函数只能包含具体的实现,不能包含任何类的静态成员。例如:

class MyClass {  
public:  
    static void staticFunc() {  // 声明静态成员函数  
        std::cout << "This is a static function." << std::endl;  
    }  
};  
  
// 在类外部定义静态成员函数  
void MyClass::staticFunc() {  // 具体实现  
    std::cout << "This is a static function." << std::endl;  
}