【问题标题】:Accessing private members c++访问私有成员 c++
【发布时间】: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类似,是因为同一个类的实例可以毫无问题地访问其他实例的字段。字段是类私有的,而不是实例私有的。
  • 您是面向对象范式的新手吗?
  • 如果一个类不能访问它自己的私有成员变量,谁可以呢?

标签: c++ private


【解决方案1】:

因为private 表示“类可访问可见”,而不是“对象可访问可见”。

【讨论】:

  • 可见性是一回事,可访问性是另一回事。私有成员即使在类之外对非成员函数也是可见的,但它们是不可访问的。
【解决方案2】:

您可以从类的成员函数/构造函数/析构函数/好友访问私有成员。它是基于类的可访问性,而不是基于对象的可访问性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多