2012-01-02 5 views
1

可能性の重複:
Are static members inherited? (C++)サブクラスはC++で親クラスの静的変数を共有していますか?

私は親クラス(Base)を持っており、それが静的std::mapを持っている場合は、BaseBase年代を行う子どもたちは、すべて同じstd::mapを共有しますか?そうでない場合、どのようにして共有することができますか?

+2

あなたはそれを試してみると思いますか? –

+0

関連の質問:http://stackoverflow.com/questions/998247/are-static-members-inherited-c – Gnawme

+0

@Gnawme:それは同じ質問です。 – Linuxios

答えて

7

はい、彼らすべてがそれを共有:

class A { 
protected: 
    static std::map<int,int> x; 

public: 
    static void push(int a, int b) { x[a] = b; } 
}; 

class B : public A { 
public: 
    static int size() { return x.size(); } 
}; 

int main() { 
    A::push(5,3); 
    A::push(4,2); 
    std::cout << B::size() << "\n"; // Displays "2" 
} 

をない限り、当然のことながら、子クラスの一つは、基本クラスのバージョンが表示されません。その場合には、同じ名前を持つ独自のメンバ変数を宣言します。

1

スタティックメンバ変数はクラスごとに1回あります。なぜそれが派生したクラスがあるときに何らかの形で変わるべきですか?つまり、すべての派生クラスはベースの静的メンバーを共有します。

+0

したがって、 '' foo " - >" bar "'というペアを追加すると、その変更は子供たちの間で共有されますか? – Linuxios

+0

これを基本クラスの静的メンバーに追加した場合:yes –

1

派生クラスの修飾されていない名前は、それを隠すために何もしないことで親実装を見つけます。派生クラスでその名前のメンバーが再定義された場合、親の静的メンバーの代わりにそのメンバーが見つかります。

関連する問題