2011-04-28 17 views
9

मैं इस प्रश्न को चर्चा के लिए पूछ रहा हूं।विरासत के साथ स्थैतिक चर का व्यवहार

मान लीजिए मैं बह वर्ग पदानुक्रम

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.will varr की वस्तु बनाने के सभी वस्तु के ऊपर या अलग उदाहरण होगा उल्लेख भर में साझा किया जाता है विभिन्न वस्तु के लिए?

2.if b1 ऑब्जेक्ट उस मान को बदलता है जो c1 ऑब्जेक्ट के लिए दिखाई देगा या नहीं।

उत्तर

11

हाँ, यह सब व्युत्पन्न (बी, सी) और आधार वर्ग (ए) के सभी उदाहरण करवाते साझा किया जाएगा ..

केवल एक एक स्थिर वस्तु के लिए उदाहरण बनाया जाएगा, और सभी जगह पर है कि ऑब्जेक्ट को फिर से पेश किया जाएगा। तो यदि आप एक ही स्थान पर बदलते हैं तो इसका मतलब है कि परिवर्तन उस स्थान पर दिखाई देगा जहां इसे फिर से पेश किया जा रहा है।

+1

तो अगर मैं के मामले में अलग होगा एक ऑब्जेक्ट में varr को b1 कहें और फिर जब मैं c1 में varr का उपयोग करता हूं क्या यह अद्यतन मूल्य सही होगा –

+2

स्थिर वस्तु के लिए केवल एक उदाहरण बनाया जाएगा, और उस स्थान पर उस ऑब्जेक्ट को फिर से पेश किया जाएगा। तो यदि आप एक ही स्थान पर बदलते हैं तो इसका मतलब है कि परिवर्तन उस स्थान पर दिखाई देगा जहां इसे फिर से पेश किया जा रहा है। आपके सटीक उत्तर के लिए – vrajs5

+1

+1। – karthik

8

varr स्थिर है (नियमित उदाहरण सदस्यों के विपरीत), इसकी केवल एक प्रति है जो कक्षा से संबंधित है, इसका एक उदाहरण नहीं है। B::varr, C::varr और A::varr सभी एक ही चर का उपयोग करते हैं, इसलिए प्रत्येक विरासत वर्ग के लिए कोई भी प्रति नहीं बनाई गई है।

1

स्थिर डेटा सदस्य और विधियां प्रति वस्तु नहीं हैं, वे प्रति वर्ग हैं। इसका मतलब है कि एक varr वर्ग ए
के रूप में वर्ग बी & सी सार्वजनिक रूप से एक से लिए गए हैं, जो बी & सी के अलावा कुछ नहीं विशेष ए बनाता है के लिए नहीं है (गया है-एक संबंध)
इसलिए सभी ए, बी & सी एक ही varr

परिदृश्य को साझा करेंगे निजी वंशानुक्रम, जहां बी & सी विशेष नहीं किया जाएगा ए और बी & सी ए :: varr के लिए पहुँच नहीं होगा

संबंधित मुद्दे