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

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

静态关键字 in C++

static 是 C++ 中的一个关键字,它可以应用于函数、类和变量。它的用途和作用在不同的场景下有所不同。

静态变量

static 关键字用于变量时,它表示这个变量是静态的(也称为内部变量)。

静态变量在程序的整个生命周期内都是存在的,即使它在函数或块作用域内定义,也可以在函数或块作用域之外访问它。因此,静态变量可以用来保存函数或类的状态信息,也可以用于实现单件模式(singleton pattern)。

以下是一个示例代码:

#include <iostream>

void countFunctionCall() {
    static int count = 0;
    count++;
    std::cout << "Function has been called " << count << " times." << std::endl;
}

int main() {
    countFunctionCall();
    countFunctionCall();
    countFunctionCall();
    return 0;
}

在上面的示例代码中,我们定义了一个静态变量 count,并在函数 countFunctionCall 中对其进行递增操作。因为 count 是静态的,所以它的值在每次函数调用之间都得以保存。该程序的输出应该是:

Function has been called 1 times.
Function has been called 2 times.
Function has been called 3 times.
静态函数

static 关键字用于函数时,它表示这个函数是静态的。静态函数只能在当前文件内被访问,不能被其他文件使用。

静态函数可以用来隐藏函数的实现细节,或者仅仅是为了方便地组织代码。

以下是一个示例代码:

#include <iostream>

static void printMessage() {
    std::cout << "Hello, world!" << std::endl;
}

int main() {
    printMessage();
    return 0;
}

在上面的示例代码中,我们定义了一个静态函数 printMessage,它输出一条消息。因为 printMessage 是静态的,所以它只能在当前文件中被访问。该程序应该输出:

Hello, world!
静态类成员

static 关键字用于类成员时,它表示这个成员是与类相关的,而不是与类的任何对象相关的。换句话说,它是一个静态变量或函数,而不是一个实例变量或虚函数。

一个静态成员可以被所有的类对象(包括类的内部和外部)共享。静态成员为类提供了一种只占用单个存储空间的方式,因为它不需要每个实例都保存一份。

以下是一个示例代码:

#include <iostream>

class MyClass {
public:
    MyClass() {
        count++;
    }

    static int getCount() {
        return count;
    }

private:
    static int count;
};

int MyClass::count = 0;

int main() {
    MyClass a;
    MyClass b;
    MyClass c;
    std::cout << "Number of MyClass objects created: " << MyClass::getCount() << std::endl;
    return 0;
}

在上面的示例代码中,我们定义了一个静态变量 count 和一个静态函数 getCount,它们都是类 MyClass 的成员。我们在类构造函数中对 count 进行递增操作,并在 getCount 函数中返回 count 的值。由于 count 是静态的,所有 MyClass 对象都共享同一个 count 变量。该程序应该输出:

Number of MyClass objects created: 3
结论

static 关键字在 C++ 中有多种用途,涉及到变量、函数和类成员。static 的作用和用途因具体场景而异,但总的来说,它用于保存状态信息、隐藏实现细节、方便组织代码等多种场景。因此,程序员应该熟练掌握 static 关键字的各种用法,在实际编程中合理地应用它们。