2011-12-17 3 views
4

В этом коде для чего я могу получить доступ к частному члену объекта без ошибки компилятора?Доступ к закрытым членам C++

class Cents 
{ 
private: 
    int m_nCents; 
public: 
    Cents(int nCents=0) 
    { 
     m_nCents = nCents; 
    } 

    // Copy constructor 
    Cents(const Cents &cSource) 
    { 
     m_nCents = cSource.m_nCents; 
    } 

    Cents& operator= (const Cents &cSource); 

}; 

Cents& Cents::operator= (const Cents &cSource) 
{ 

cSource.m_nCents частный, почему я могу сделать следующее:

m_nCents = cSource.m_nCents; 

    // return the existing object 
    return *this; 
} 
+5

Если это похоже на Java, это происходит потому, что экземпляры одного и того же класса могут без проблем обращаться к полям других экземпляров. Поля являются закрытыми для класса, а не экземплярами. – fge

+1

Вы очень новичок в объектно-ориентированной парадигме? – Lion

+1

Если класс не смог получить доступ к своим собственным переменным-членам, кто мог? –

ответ

9

private, потому что означает « видимых доступен для класса», а не « видимого доступного для объекта».

+2

Видимость - это одно, а доступность - другое. Частные члены видны даже вне класса, для функций, отличных от членов, но они недоступны. – Nawaz

4

Доступ к частным членам из членов-функций/конструкторов/деструкторов/freinds класса. Это доступность на основе классов, а не объектная доступность.