📜  C ++ |静态关键字|问题2(1)

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

C++ | 静态关键字 | 问题2

介绍

在 C++ 中,我们可以使用 static 关键字来定义静态成员变量和静态成员方法。静态成员变量和静态成员方法是在类的级别上定义的,而不是在实例的级别上定义的。这意味着,无论我们创建了多少次类的实例,静态成员变量和静态成员方法的值都是唯一的。

静态成员变量

静态成员变量是属于类的,而不是属于对象的。这意味着,在创建类的实例之前,就已经存在该静态成员变量的内存空间,且它的值为 0。当我们创建类的一个实例时,它不会改变这个静态成员变量的值。我们可以使用类名或对象名来访问静态成员变量。

以下是一个示例程序:

#include <iostream>

class MyClass {
public:
    static int myNumber; // 声明静态成员变量
};

int MyClass::myNumber = 123; // 定义静态成员变量并初始化为 123

int main() {
    MyClass obj1, obj2;
    std::cout << obj1.myNumber << std::endl; // 输出 123
    std::cout << obj2.myNumber << std::endl; // 输出 123
    obj1.myNumber = 456;
    std::cout << obj1.myNumber << std::endl; // 输出 456
    std::cout << obj2.myNumber << std::endl; // 输出 456
    return 0;
}

在上面的示例中,我们定义了一个静态成员变量 myNumber,并将其初始化为 123。我们创建了两个类的实例 obj1obj2,并访问了 myNumber 的值。由于 myNumber 是静态成员变量,其值在两个实例之间共享。我们可以看到,在修改 obj1.myNumber 的值后,obj2.myNumber 的值也被改变了。

静态成员方法

静态成员方法是属于类的,而不是属于对象的,并且它们没有访问任何对象的成员变量或成员方法的权限。因此,静态成员方法不能通过 this 指针访问对象的成员变量或成员方法。我们可以使用类名或对象名来调用静态成员方法。

以下是一个示例程序:

#include <iostream>

class MyClass {
public:
    static int myNumber; // 声明静态成员变量
    static void printMyNumber() { // 声明静态成员方法
        std::cout << "My number is " << myNumber << std::endl;
    }
};

int MyClass::myNumber = 123; // 定义静态成员变量并初始化为 123

int main() {
    MyClass::printMyNumber(); // 输出 "My number is 123"
    return 0;
}

在上面的示例中,我们定义了一个静态成员方法 printMyNumber,用于输出静态成员变量 myNumber 的值。我们可以使用类名 MyClass 来调用该方法并输出 myNumber 的值。

总结

静态成员变量和静态成员方法是属于类的,而不是属于对象的。它们不依赖于任何类的实例,因此可以通过类名来访问和调用。在使用静态成员变量和静态成员方法时,需要注意它们只有一份内存空间,因此它们的值的修改会影响所有的实例。