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

📅  最后修改于: 2023-12-03 14:39:38.934000             🧑  作者: Mango

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

静态关键字是C++中的一个重要概念,它可用于类中的成员变量和函数,以及在函数中的局部变量中。它的使用可以将变量或函数限制在当前作用域内,或者是对多个对象共享的全局变量或函数。

静态成员变量

静态成员变量是与类关联的变量,被所有该类的对象所共享。它通常用于类中实例数量的统计、对象标识符的生成等问题。

class MyCount {
public:
    static int count; // 声明静态成员变量
    MyCount() { count++; } // 构造函数中增加统计
    ~MyCount() { count--; } // 析构函数中减少统计
};

int MyCount::count = 0; // 定义静态成员变量

int main() {
    MyCount obj1, obj2, obj3;
    cout << "count: " << MyCount::count << endl; // 输出为 3
    return 0;
}

上述代码中,静态成员变量 count 用于统计类 MyCount 的实例数量。在构造函数中,每创建一个对象就会自动调用构造函数,并增加 count 的值;在析构函数中,每删除一个对象就会自动调用析构函数,并减少 count 的值。最后在主程序中,通过类名限定符访问静态成员变量 count 的值。

静态成员函数

静态成员函数是可以不依赖对象而调用的函数,它仅仅与类相关,而不与具体的对象相关。静态成员函数可以在类外部用作与类相关的全局函数,或者是在类内部用作功能函数和工具函数。

class MyTool {
public:
    static void print(string str) { cout << str << endl; } // 声明静态成员函数
};

int main() {
    MyTool::print("Hello, world!"); // 在类外部调用静态成员函数
    return 0;
}

上述代码中,静态成员函数 print 是一个与类 MyTool 相关的全局函数,它的调用不需要实例化对象,直接通过类名限定符即可。

静态局部变量

静态局部变量是在函数内定义且只能在函数内部使用的变量,但它的生命周期与程序运行的整个周期保持一致。静态局部变量既可以在函数内部使用作为统计器、缓存器等用途,也可以在函数之间共享值。

void myFunction() {
    static int count = 0; // 声明静态局部变量
    cout << "count = " << count << endl;
    count++;
}

int main() {
    myFunction(); // 输出为 count = 0
    myFunction(); // 输出为 count = 1
    myFunction(); // 输出为 count = 2
    return 0;
}

上述代码中,静态局部变量 count 在 myFunction 函数内部声明,每次函数被调用时都会让 count 加 1 并输出其值。因为是静态局部变量,所以其值在函数调用完毕后并不会被销毁,而是一直保留到程序结束,直到下一次该函数被调用时才会重新初始化为 0。

总结

静态关键字在C++中有着广泛的应用,可用于实现成员变量和成员函数的共享、全局函数和工具函数的定义、函数内部的局部变量使用等多种目的。程序员需要深入理解静态关键字的特性,灵活应用静态关键字,提高代码的复用性和效率。