我认为不可能,但如果你有两个同一个班级的实例,你是否可以从另一个人那里访问一个人的私人成员?
这就是为什么你也可以在拷贝构造函数中做到这一点?事实上,复制构造函数是允许的原因吗?这不会破坏封装吗?
答案 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
};