gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:00:39 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com