【发布时间】:2011-12-17 19:57:15
【问题描述】:
在这段代码中,为什么我可以访问对象的私有成员而没有编译器错误?
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;
}
【问题讨论】:
-
如果和Java类似,是因为同一个类的实例可以毫无问题地访问其他实例的字段。字段是类私有的,而不是实例私有的。
-
您是面向对象范式的新手吗?
-
如果一个类不能访问它自己的私有成员变量,谁可以呢?