2017-11-20 6 views
0

クラスの2つの異なるオブジェクト(またはインスタンスに違いがあるかどうかわかりません)を持つと、コンストラクタを個別にインスタンス化しますか?異なるオブジェクトが同じコンストラクタに影響するC++ 11

たとえば、変数zを0にするコンストラクタを持つ。クラスの関数は、zに10を加算する。だから私は同じ機能を呼び出すために他のオブジェクトを使用すると、zは20(前回の値プラス10)か10(0 + 10)になりますか?

多くの感謝!

+2

関連コード、好ましくは[mcve]を記入してください。 –

答えて

1

あなたは、クラスAとクラスBを持っている場合は

struct A { 
    int x = 0; 
    void inc() { x+=10; } 
}; 

struct B { 
    static int x; 
    void inc() { x+=10; }  
}; 

int B::x = 0; 

int main() { 
    A a1; 
    a1.inc(); 
    std::cout << a1.x << '\n'; 

    A a2; 
    a2.inc(); 
    std::cout << a2.x << '\n'; 

    B b1; 
    b1.inc(); 
    std::cout << b1.x << '\n'; 

    B b2; 
    b2.inc(); 
    std::cout << b2.x << '\n'; 
} 

出力:class Aメンバ変数xのインスタンスの場合

 
10 
10 
10 
20 

が共有されていません。したがって、それぞれのインクリメントの後にa1.xおよびa2.xは両方とも10です。 class Bキーワードstaticためしかし

は、すべてのインスタンス間で共有されて クラス変数として xを宣言します。それで、これまでのようなインスタンスのインクリメントは常にクラスメンバーをインクリメントします。 b1.inc()による最初のインクリメント後、 B::xの値は 10であり、 b2.inc()による2番目のインクリメントの後の値は 20です。

関連する問題