c++ - 作为参数传递的类对象,访问自己的私有(private)成员

标签 c++ class

class Foo
{
public:
void someFunk( Foo &bar );
private:
int a;
...
};

void Foo::someFunk( Foo &bar )
{
a = bar.a;
}

我注意到作为参数传递的对象可以访问私有(private)数据成员。我明白为什么要使用 this 指针,但作为参数传递的对象不应该调用访问器吗?我认为这是错误的,但代码正在为我编译。

最佳答案

我不知道这样做的官方理由是什么,但在我看来,能够访问您自己类的另一个对象的私有(private)成员不会破坏封装,也不会产生任何额外的耦合。

封装的要点是类A的对象不应该知道类B的对象的内部工作,这样B的实现可以改变而不影响A。但是根据定义,类A的任何对象都知道内部A类的任何其他对象。换句话说,谈论两个不同类之间的耦合是有意义的,但谈论同一类的两个对象之间的耦合是没有意义的。

在更实际的层面上,如果您不能访问同一类对象的私有(private)成员,您将如何实现复制构造函数?您必须为每个私有(private)成员创建一个访问器,这距离将其公开仅一步之遥。更不用说为每个私有(private)成员提供 setter/getter 会使您的类变得不必要地庞大并且难以维护。

关于c++ - 作为参数传递的类对象,访问自己的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5605762/

相关文章:

c++ - 这种使用模板的类层次结构的函数重载方式安全吗?

c++ - "Best"(惯用)从 C++ 容器中选择 k 个最小元素的方法

c++ - 无法从 C++ 代码连接到 MongoDB

c++ - 需要类语法解释

javascript - 这是 JS 中 OOP 的一个很好的示例吗?

c++ - 这是某种指针错误吗?

c++ - 如何在 C++ 中创建由 MSHTML 呈现的网页的 direct3d 纹理?

c++ - 英特尔 MKL 内存管理和异常

Perl 错误 : Can't modify non-lvalue subroutine call at

python - Python 类属性上的 While 循环