2012-10-11 12 views
5

संभव डुप्लिकेट:
Class Data Encapsulation(private data) in operator overloadingencapsulation का उल्लंघन?

कृपया इस उदाहरण को देखो।

class myClass { 
    int a; 
public : 
    myClass() { 
    this->a = 0; 
    } 

    myClass(int val) { 
    this->a = val; 
    } 

    void add(myClass &obj2) { 
    cout << "Result = " << this->a + obj2.a; 
    obj2.a = 0; 
    } 

    void show() { 
    cout << "a = " << this->a; 
    } 
}; 

int main() { 
    myClass obj1(10), obj2(20); 

    obj2.show(); //prints 20. 
    obj1.add(obj2); 
    obj2.show(); //prints 0. 

    return 0; 
} 

ऐड() फ़ंक्शन में, मैं obj2 के एक निजी सदस्य का मान तक पहुँचने के लिए जब मैं वास्तव में जोड़ें() obj1 के संदर्भ में कहा है कर रहा हूँ। क्या यह encapsulation का उल्लंघन नहीं है?

पहले मैं सोच रहा था कि संकलक मुझे एक त्रुटि फेंक देगा, लेकिन ऐसा नहीं हुआ।

+0

यदि आप संकलक शिकायत करना चाहते थे, तो इसके बजाय 'const' संदर्भ लेने के लिए 'add' घोषित क्यों न करें? –

उत्तर

7

सं

Encapsulation वर्ग स्तर पर काम करता है, उदाहरण के स्तर पर नहीं।

आप अपनी कक्षा के किसी भी उदाहरण के निजी सदस्यों तक पहुंच सकते हैं।
आप अपनी कक्षा से प्राप्त कक्षा के संदर्भ के माध्यम से अपनी कक्षा द्वारा परिभाषित निजी सदस्यों तक भी पहुंच सकते हैं।

2

यह encapsulation का उल्लंघन नहीं है क्योंकि आप एक विधि में एक सदस्य चर का उपयोग कर रहे हैं जो दोनों एक ही कक्षा के हैं। यदि obj2 किसी अन्य वर्ग का संदर्भ था जैसे कि आपका क्लास, तो यह उल्लंघन होगा क्योंकि आप किसी अन्य वर्ग के निजी सदस्य तक पहुंच रहे थे।

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