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

C++ 您可以跨类实例访问私有成员变量吗?,c++,C++,我认为这是不可能的,但是如果你有两个相同类的实例,你可以从另一个访问一个类的私有成员吗 这就是为什么在复制构造函数中也可以这样做的原因吗?事实上,复制构造函数是允许这样做的原因吗?这不会破坏封装吗?是的,类中的任何代码都可以访问该类的任何实例中的私有数据 如果将封装单元视为对象,则会破坏封装。C++不这么认为;它从类的角度考虑封装 访问限制是类的属性,而不是实例的属性 这就是为什么您可以编写常用的复制构造函数: class Foo { int a; // private! public

我认为这是不可能的,但是如果你有两个相同类的实例,你可以从另一个访问一个类的私有成员吗


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

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


如果将封装单元视为对象,则会破坏封装。C++不这么认为;它从类的角度考虑封装

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

这就是为什么您可以编写常用的复制构造函数:

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
};