为什么 OBJ 的私有值可以通过类实例更改
why private value of the obj can be changed by class instance?
#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;
}
a是A类的一个实例,有一个私有值叫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'
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 为什么我可以通过引用修改常量返回
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 哪些库可以通过Opencv调整曝光率
- 可以通过复制来初始化集合吗?
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 我可以通过取每个数字的模并取和来计算大数的模数吗?
- 我们可以通过 IPC 传递具有动态管理成员的类对象吗?
- 是否可以通过每次在内存中仅保存一个平铺来处理完整的平铺 tiff 图像?
- 两个进程可以通过跟踪附加到同一个 PID 吗?
- 我可以通过将类强制转换为 char* 来序列化类吗?
- 在 C/C++ 中,是否可以通过使用指针更改"important"内存地址的值来创建简单的恶意软件?
- C++ 为什么const X&可以通过功能进行修改?
- 可以通过常量引用返回默认参数的值吗?
- 为什么我可以通过SubBase类的公共继承方法打印出基类的私人继承成员
- C++中有没有一种方法可以通过指定列表中的每个成员变量来构造对象
- 为什么我可以通过原始指针而不是shared_ptr来修改对象
- 是否可以通过使用移动/交换 c++11 来延长返回的临时变量的生命周期
- 为什么我可以通过野生指针调用成员函数
- 为什么 OBJ 的私有值可以通过类实例更改