你可以跨类实例访问私有成员变量吗?

时间:2011-12-20 15:41:08

标签: c++

我认为不可能,但如果你有两个同一个班级的实例,你是否可以从另一个人那里访问一个人的私人成员?

这就是为什么你也可以在拷贝构造函数中做到这一点?事实上,复制构造函数是允许的原因吗?这不会破坏封装吗?

2 个答案:

答案 0 :(得分:8)

是的,类中的任何代码都可以访问该类的任何实例中的私有数据。

如果您将封装单位视为对象,则会破坏封装。 C ++没有这样想;它考虑了类的封装。

答案 1 :(得分:8)

访问限制是的属性,而不是实例的属性。

这就是你可以编写通常的复制构造函数的原因:

class Foo
{
     int a; // private!
public:
    Foo (Foo const & rhs) : a(rhs.a) { } // rhs.a is accessible
};

这个想法也助长了“工厂”的成语:

class Bar
{
    Bar() { } // private?!
public:
    static Bar * create() { return new Bar(); } // Bar::Bar() is accessible
};