我实例化一个类的两个对象,一个对象访问和更改另一个对象的私有字段。我认为这违反了私有访问控制。它打破了 OOP 中的封装。但是,我发现 C++ 和 Java 似乎都允许这种“违规行为”。请告诉我为什么允许这种“违规行为”!
示例 C++ 代码:
#include <iostream>
using namespace std;
class Person
{
private:
int age;
public:
void changeAge(Person & p, int k) // change peer object's private fields
{
p.age = k;
};
Person(int k)
{
age = k;
};
void showAge()
{
cout << this->age << endl;
};
};
int main()
{
Person a(10);
a.showAge();
Person b(11);
b.changeAge(a, 20); // I think the compiler SHOULD generate access violation error
a.showAge();
b.showAge();
return 0;
};
输出是:
10
20
11
您可以为 Java 编写类似的代码,并且您将获得相同的输出。
我查阅了http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html 我了解私有字段在类级别是可见的。我相信这可能是发生这种“违规”的唯一可行原因。(如果可以,请添加更多理由!)
但是,我认为允许这种“违规”是没有意义的,因为它破坏了 OOP 中的封装。我们都是人类这一事实并不意味着我可以访问和修改您的私人资料。如果可以的话,它不再是你的“私人物品”。
请赐教!“违规”是 C++ 和 Java 的错误吗?如果我错了,请告诉我!