具有继承的静态变量的行为

发布于 2024-11-03 16:28:10 字数 421 浏览 1 评论 0原文

我提这个问题是为了大家讨论。

假设我有流动的类层次结构

    class  A
    {
    public:
         static int varr;
    }

    class B : public A
    {

    }

    Class C : public A
    {
    }

如果我创建 B b1,b2,b3;C c1,c2,c3;A a1, a2; 的对象

1. varr 是否在上述所有对象之间共享,或者不同的对象会有单独的实例?

2.如果b1对象改变了值,它是否会反映在c1对象上。

I am asking this question for the discussion.

Suppose i have flowing class hierarchy

    class  A
    {
    public:
         static int varr;
    }

    class B : public A
    {

    }

    Class C : public A
    {
    }

If I create the Object of B b1,b2,b3; and C c1,c2,c3; and A a1, a2;

1.will varr is shared across all the object mentioned above or there will be separate instance for different object?

2.if b1 object change the value it will be reflected for c1 object or not.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

天赋异禀 2024-11-10 16:28:10

是的,它将在所有派生类(B,C)和基类(A)的所有实例中共享。

只会创建静态对象的一个​​实例,并且在所有位置都会引用该对象。因此,如果您在一个地方进行更改,则意味着更改将反映在所引用的所有位置。

Yes, it will be shared accross all the instance of all derived(B,C) and base class(A)..

Only one instance for a static object will be created, and at all place that object will be refered. So if you change at one place it means change will be reflected at all location where its being refered.

执笏见 2024-11-10 16:28:10

由于 varr 是静态的(与常规实例成员相反),因此只有一个属于类本身的副本,而不是属于类的实例。 B::varrC::varrA::varr 都访问同一个变量,因此没有为每个继承创建副本类要么。

Since varr is static (as opposed to a regular instance members), there is only one copy of it that belongs to the class itself, not an instance of it. B::varr,C::varr and A::varr all access the same variable, so there is no copy made for each inheriting class either.

纸伞微斜 2024-11-10 16:28:10

由于静态数据成员和方法不是针对每个对象的,而是针对每个类的。这意味着 A 类有一个 varr。

作为 B 类和C 是从 A 公开继承的,这使得 B 和 C 是从 A 继承的。 C 只不过是专门的 A.(有 IS-A 关系)

所以所有A,B& C 将共享相同的 varr

私有继承的情况下,情况会有所不同,其中 B & C 不会专门化 A。而 B 和 B 则不会被专门化。 C 将无法访问 A::varr

As static data members and methods are not per object, they are per class. that means one varr is there for class A.

as class B & C are publically inherited from A, which makes B & C nothing but specialized A. (HAS IS-A RELATIONSHIP)

so all A, B & C will share the same varr

scenario would be different in case of private inheritance, where B & C would not be specialized A. And B & C will not have access to A::varr

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文