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。