【问题标题】:Declaring a storage class as a static member in a host class将存储类声明为主机类中的静态成员
【发布时间】:2019-09-13 20:46:27
【问题描述】:

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

使用以下方法:

class A
{
    public:
       static int foo;
};

class B
{
    public:
       static A bar;
};

class C
{
    public:
       A bar;
};

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

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

【问题讨论】:

标签: c++ class object static initialization


【解决方案1】:

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

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

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

顺便说一句,由于 foo 被声明为静态,因此 foo 不绑定到任何 A 类的实例。因此,即使 C 包含非静态 A,foo 本身也是静态的,并且可以通过 B 或 C 的任何实例访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2011-02-24
    • 2021-12-18
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多