MST

星途 面试题库

面试题:C++中静态成员变量如何实现对象间数据共享

在C++中,静态成员变量是如何为多个对象提供数据共享的?请描述其定义、初始化方式以及访问方法,并举例说明在类的不同对象间它是如何保持数据一致性的。
34.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 定义
    • 静态成员变量是类中所有对象共享的成员变量。它不属于某个特定的对象,而是属于整个类。在类的定义中,使用static关键字声明静态成员变量。例如:
class MyClass {
public:
    static int sharedVariable;
};
  1. 初始化方式
    • 静态成员变量必须在类外进行初始化,且只能初始化一次。初始化时不需要再次使用static关键字。例如:
int MyClass::sharedVariable = 0;
  1. 访问方法
    • 可以通过类名直接访问静态成员变量,使用::作用域运算符。例如:
int value = MyClass::sharedVariable;
  • 也可以通过对象来访问静态成员变量,但这种方式不推荐,因为静态成员变量不属于某个对象。例如:
MyClass obj;
int value2 = obj.sharedVariable;
  1. 在类的不同对象间保持数据一致性的示例
#include <iostream>

class Counter {
public:
    static int count;
    Counter() {
        ++count;
    }
    ~Counter() {
        --count;
    }
};

int Counter::count = 0;

int main() {
    Counter obj1;
    Counter obj2;
    std::cout << "Number of objects: " << Counter::count << std::endl;
    {
        Counter obj3;
        std::cout << "Number of objects: " << Counter::count << std::endl;
    }
    std::cout << "Number of objects: " << Counter::count << std::endl;
    return 0;
}

在上述示例中,Counter类有一个静态成员变量count。每次创建Counter类的对象时,构造函数会增加count的值,每次销毁对象时,析构函数会减少count的值。由于count是静态成员变量,无论创建多少个Counter类的对象,count始终是共享的,从而在不同对象间保持数据一致性。每个对象对count的修改都会影响到其他对象看到的count值。