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

时间:2011-04-28 10:30:35

标签: c++ static-members

我在讨论这个问题。

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

    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对象的反映值。

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:8)

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

答案 2 :(得分:1)

由于静态数据成员和方法不是每个对象,因此它们是每个类。这意味着一个varr适用于A类。
作为B级和B级C公开地继承自A,这使得B& C只是专门的A.(HAS IS-A关系) 所以 A,B& C将共享相同的varr

私人继承的情况下情况会有所不同,其中B& C不是专业的A.而且B& C将无法访问A :: varr