为什么 OBJ 的私有值可以通过类实例更改

why private value of the obj can be changed by class instance?

本文关键字:实例 可以通过 OBJ 为什么      更新时间:2023-10-16
#include<iostream>
using namespace std;
class A
{
    private:
        int value;
    public:
        A(int init):value(init){}
        void changevalue(A &a){a.value = 100;}//why a's value can be changed?
        void printvalue(){cout << value << endl;}
};
int main(int argc , char *argv[])
{
    A a(2);
    A b(3);
    a.changevalue(b);
    b.printvalue();
    return 0;
}

aA类的一个实例,有一个私有值叫value,但是为什么这个私有值可以改变呢?这是包含在类范围内的参数列表吗?

因为类访问说明符适用于每个类而不是每个对象。

您始终可以在类函数中修改相同类型的对象。通常的示例是复制构造函数和复制赋值运算符。

private的意思不是"对象标识私有",而是"类型(和朋友)私有"。

请注意,辅助功能和能够写入类型是正交概念。您始终可以访问自己类型的对象中的私有值,但是否可以写入它取决于该对象是否声明为 const

void f(A& a){ a.value = 4; } // OK: 'a' is not 'const'
void g(A const& a){ a.value = 4 } // error: 'a' is marked as ' const'