在类c的方法中访问类的私有变量

参见英文答案 > Why can I access private variables in the copy constructor?                                    5个
我试图理解为什么同一个类的对象可以访问彼此的私有成员.其实我知道

The access modifiers work on class level, and not on object level.

here开始.但我不明白它的原因.我只能假设它与自动生成复制构造函数和复制赋值运算符(显然应该可以访问私有数据来复制它)相关联,但我不确定.实际上,一个类的任何不同实例都可以改变彼此的私有变量,这看起来很奇怪,例如:

#include <iostream>
class A{
int c;
public:
  A():c(1){}
  void f(A & a){
    a.c = 2;
  }
  int getC(){return c;}
};
int main()
{
    A a1;
    A a2;
    a1.f(a2);
    std::cout << "A1 c " << a1.getC() << std::endl;
    std::cout << "A2 c " << a2.getC() << std::endl;
    return 0;
}

a1将改变a2.c并输出

A1 c 1
A2 c 2

谢谢.

最佳答案
您可以轻松解决此类对象级别的保护问题,因此我怀疑他们是否值得付出努力.也就是说,替换

void f(A &a) {
    a.c = 2;
}

void f(A &a) {
    a.update_c(2);
}
void update_c(int val) {
    c = val;
}

转载注明原文:在类c的方法中访问类的私有变量 - 代码日志