#include <iostream>
using namespace std;
class test{
private:
int a;
int b;
public:
test(int a = 1, int b = 2){
this->a = a;
this->b = b;
}
int re(test ccc){
a = ccc.a + 444;
b = ccc.b + 444;
}
};
为什么re函数中的ccc可以直接调用a和b而不报错?
怪我咯2017-04-17 13:44:40
搜了下(关键字:c++访问类私有变量),这里有不错的解释:
http://stackoverflow.com/questions/7396846/with-a-private-modifier-why-can-the-member-in-other-objects-be-accessed-directl
好问题。要点是 C++ 中的保护是类级别的,而不是对象级别的。因此,在一个对象上调用的方法可以访问同一类的任何其他实例的私有成员。
如果您看到保护的作用是允许封装以确保类的编写者可以构建内聚的类,并且不必防止外部代码修改对象内容,那么这是有道理的。
关于真正的“为什么?”的另一个想法。考虑一下您如何编写几乎所有复制构造函数;您想要访问原始的底层数据结构,而不是其呈现的界面。