为什么同一类的对象可以访问彼此的私有数据?
class TrivialClass {
public:
TrivialClass(const std::string& data) :
mData(data) {};
const std::string& getData(const TrivialClass& rhs) const {
return rhs.mData;
};
private:
std::string mData;
};
int main() {
TrivialClass a("fish");
TrivialClass b("heads");
std::cout << "b via a = " << a.getData(b) << std::endl;
return 0;
}
这段代码有效。对象 a 完全有可能访问对象 b 的私有数据并返回它。为什么会这样呢?我认为私人数据是私人的。 (我一开始尝试理解 pimpl 习惯用法中的复制构造函数,但后来我发现我什至不理解这个简单的情况。)
因为这就是 C++ 中的工作原理。在 C++ 中,访问控制适用于每班基础上,而不是每个对象的基础上。
C++ 中的访问控制是作为静态、编译时功能实现的。我认为很明显,在编译时实现任何有意义的每个对象访问控制实际上是不可能的。只有每类控制才能以这种方式实现。
每个对象控制的一些提示存在于受保护的访问规范,这就是为什么它甚至在标准 (11.5) 中拥有自己的专门章节。但其中描述的每个对象的特征仍然相当初级。同样,C++ 中的访问控制是针对每个类进行的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)