Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么对象是';相同类型的对象可以访问的私有成员?_C++_Private - Fatal编程技术网

C++ 为什么对象是';相同类型的对象可以访问的私有成员?

C++ 为什么对象是';相同类型的对象可以访问的私有成员?,c++,private,C++,Private,我惊讶地发现,这是一个汇编 class A { int i; public: A() {} A(A &a) {i = a.i;} }; int main(void) { A a1; A a2(a1); } 也就是说,对象a2可以访问对象a1的私有成员。为什么是这种情况,即为什么这很有用?如果需要,如何限制这种访问?这正是private所做的,这是一个奇怪的问题。我希望它能产生有趣的响应。这些修饰符限制了对类的访问,而不是对实例的访问。这就是它们

我惊讶地发现,这是一个汇编

class A
{
    int i;
public:
    A() {}
    A(A &a) {i = a.i;}
};

int main(void)
{
    A a1;
    A a2(a1);
}

也就是说,对象
a2
可以访问对象
a1
的私有成员。为什么是这种情况,即为什么这很有用?如果需要,如何限制这种访问?

这正是
private
所做的,这是一个奇怪的问题。我希望它能产生有趣的响应。这些修饰符限制了对类的访问,而不是对实例的访问。这就是它们的工作原理。请记住,既然你是创建类的人,那么你就是控制类使用方式的人。没有人让你访问另一个实例的成员,那么这种保护有什么用呢?例如,如果每个实例都有访问控制,那么实现一个复制构造函数将要求每个成员变量都有一个公共getter。这正是
private
所做的,这是一个奇怪的问题。我希望它能产生有趣的响应。这些修饰符限制了对类的访问,而不是对实例的访问。这就是它们的工作原理。请记住,既然你是创建类的人,那么你就是控制类使用方式的人。没有人让你访问另一个实例的成员,那么这种保护有什么用呢?例如,如果访问控制是针对每个实例的,那么实现一个复制构造函数需要每个成员变量都有一个公共getter。