2012-10-11 12 views
5

Olası Çoğalt:
Class Data Encapsulation(private data) in operator overloadingKapsülleme ihlali var mı?

Bu örneğe bakınız. Eklenti() fonksiyonunda

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; 
} 

, ben aslında obj1 bağlamında eklenti() aradım zaman obj2 özel bir üyesinin değerini ulaşamıyorum. Bu bir kapsülleme ihlali değil mi?

İlk başta derleyicinin bana bir hata vereceğini düşünüyordum, ama yapmadı.

+0

Derleyicinin şikayet etmesini istemediyseniz, bunun yerine 'const' yerine bir' const' başvurusunu bildirme neden olmaz? –

cevap

7

sayılı

Kapsülleme değil örneği düzeyinde, sınıf düzeyinde çalışır.

Sınıfınızın herhangi bir örneğinin özel üyelerine erişebilirsiniz.
Sınıfınız tarafından tanımlanan özel üyelere, sınıfınızdan türetilen bir sınıfa başvuru yoluyla bile erişebilirsiniz.

2

Bu, her ikisi de aynı sınıfa ait bir yöntemde bir üye değişkenine eriştiğiniz için, enkapsülasyon ihlali değildir. Eğer obj2 başka bir sınıfa ait bir referans olsaydı, örneğin sınıfa ait olsaydı, o zaman başka bir sınıfın özel bir üyesine erişirken bir ihlal olurdu.