c ++为什么对象的副本不允许访问原始的私有变量?

Mar*_*ark 3 c++ object

例如,

Number operator+(Number a, Number b) {

    return Number(a.x + b.x);


}
Run Code Online (Sandbox Code Playgroud)

这会导致某种"无法访问私有成员错误".据我所知,如果我没有通过引用传递,则数字a和数字b将被复制到堆栈中并在函数体中使用.但是,我不明白为什么他们不允许访问原件的私人会员.我怎么误解对象的概念?为什么朋友和会员功能不需要通过引用传递?

Ale*_*ler 8

operator+是一个未绑定的函数,即它不是成员Number,这是规则,它没有隐私访问私有成员.

Number通过值或引用传递对象不会影响规则.访问保护适用于对对象的每次访问Number,即使它是基于堆栈的私有副本.

至少有三种方法:

  • 宣布Number operator+(Number, Number)一位朋友Number
  • 添加一个公共getter,x以便可以访问该变量.
  • +=运算符实现为类的成员,并根据它实现自由运算符:return Number(a) += b;