class Foo
{
public:
void someFunk( Foo &bar );
private:
int a;
...
};
void Foo::someFunk( Foo &bar )
{
a = bar.a;
}
Run Code Online (Sandbox Code Playgroud)
我注意到允许作为参数传递的对象访问私有数据成员.我可以看到为什么这个指针,但不应该作为参数传递的对象必须调用一个访问器?我认为这是错的,但代码正在为我编译.
我不知道官方的理由是什么,但在我看来,能够访问自己类的另一个对象的私有成员不会破坏封装,也不会产生任何额外的耦合.
封装的要点是类A的对象不应该知道类B的对象的内部工作,因此B的实现可以在不影响A的情况下改变.但是,根据定义,类A的任何对象都知道任何其他对象的内部. A类的对象.换句话说,谈论两个不同类之间的耦合是有意义的,但谈论同一个类的两个对象之间的耦合是没有意义的.
在更实际的层面上,如果您无法访问同一类对象的私有成员,您将如何实现复制构造函数?您必须拥有每个私人会员的访问者,这距离公开只有一步之遥.更不用说为每个私人会员提供一个吸气剂会使你的课程变得不必要的大而且难以维护.