在这段代码中,为什么我可以在没有编译器错误的情况下访问对象的私有成员?
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;
}
因为private
表示“ 对类可见 ”,而不是“ 对对象可见 ”。
可见性是一回事,可访问性是另一回事。私有成员甚至在类之外对非成员函数也可见,但是它们不可访问。