📅  最后修改于: 2023-12-03 15:29:42.779000             🧑  作者: Mango
在 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。我们创建了两个类的实例 obj1
和 obj2
,并访问了 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
的值。
静态成员变量和静态成员方法是属于类的,而不是属于对象的。它们不依赖于任何类的实例,因此可以通过类名来访问和调用。在使用静态成员变量和静态成员方法时,需要注意它们只有一份内存空间,因此它们的值的修改会影响所有的实例。