只有谁有权访问源代码才能看到私有方法文档。 是否值得花费在它上面?
我一直在阅读关于面向对象的C语言,但是我从来不喜欢在C ++中不能拥有私人数据成员。 但后来我想到你可以创build2个结构。 一个在头文件中定义,另一个在源文件中定义。 // ========================================= // in somestruct.h typedef struct { int _public_member; } SomeStruct; // ========================================= // in somestruct.c #include "somestruct.h" typedef struct { int _public_member; int _private_member; } SomeStructSource; SomeStruct *SomeStruct_Create() { SomeStructSource *p = (SomeStructSource *)malloc(sizeof(SomeStructSource)); p->_private_member = 42; return (SomeStruct *)p; } 从这里你可以把一个结构投给另一个。 这被认为是不好的做法? 还是经常做?
为什么同一类的对象可以访问对方的私有数据? 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习语中的拷贝构造函数,但是后来我发现我甚至不理解这个简单的情况。)
我观察到,外部类可以访问内部类的私有实例variables。 这怎么可能? 下面是一个演示相同的示例代码: class ABC{ class XYZ{ private int x=10; } public static void main(String… args){ ABC.XYZ xx = new ABC().new XYZ(); System.out.println("Hello :: "+xx.x); ///Why is this allowed?? } } 为什么这种行为是允许的?