在主机类中将存储类声明为静态成员

时间:2019-04-24 14:03:41

标签: c++ class object static initialization

我正在通过将模块构建为存储类来编写面向过程的面向对象样式的实用程序。

使用以下方法:

class A
{
    public:
       static int foo;
};

class B
{
    public:
       static A bar;
};

class C
{
    public:
       A bar;
};

B类和C类的行为有什么区别?

编辑: 在B类中声明为静态时与在C类中声明为非静态时,存储类A的生存期有何不同?

1 个答案:

答案 0 :(得分:0)

类B 声明了类B的静态成员A,这意味着它没有绑定到类实例,但是可以被该类的所有实例访问。每个实例都可以更新它,其他实例可以看到更新。

类C 声明了类C的一个非静态成员A,这意味着它已绑定到该类的实例。每个实例都有其自己的A类成员。修改一个不会影响其他。

由于A在B类和C类中都是公共的,因此任何人都可以根据所述规则访问A类对象。

偶然地,由于foo被声明为静态,因此foo没有绑定到Class A的任何实例。因此,即使C包含非静态A,foo本身也将是静态的,并且可以通过B或C的任何实例进行访问。 / p>