如果我有三个班级,A,B,C.A和B是朋友(双向).此外,B和C是朋友(双向).A有一个指向B的指针,B有一个指向C的指针.为什么A不能通过指针访问C的私有数据?
只是为了澄清:这是一个纯粹的理论C++语言问题,而不是设计建议问题.
约翰是我的朋友,他可以随时使用我的无线连接(我相信他).
约翰的朋友蒂姆虽然是一个浪费,虽然约翰是我的朋友,但我不把蒂姆当作朋友,所以我不让他使用我的无线连接.
约翰的孩子也是一群流氓,所以我不相信他们,他们绝对不是我的朋友,也不是我自己的孩子,我相信我可以抛弃他们.
虽然我们的孩子无法直接访问无线网络,但如果他们通过我们,他们可以访问它.因此John的孩子可以通过John访问我的无线网络(即他们受 John 监督和保护).
约翰有一份政府工作,所以不幸的是他不能信任任何人,特别是涉及无线时.
这允许像复制构造函数这样的东西,你可以访问另一个对象的私有成员,即使没有真正的访问.
所以我也是我所有克隆人的自动朋友:-)因为他们只是我自己的其他情况.
C++中的友谊不是传递性的:
(A is friend of B) and (B is friend of C) does not mean (A is friend of C)
友谊也不是对称的.
(A is friend of B) does not mean (B is friend of A)
你必须明确声明A是C的朋友才能从A中访问C的私有内容.如果向类中添加setter和getter会暴露出不打算暴露的信息,如果你不能,你应该考虑朋友发现你的设计有问题(使用朋友是有效的.这不是糟糕设计的标志).如果你可以添加一个setter和getter而不破坏界面,那么你应该避免让其他类成为朋友.请注意,嵌套类始终是嵌套类的朋友.因此嵌套类可以看到嵌套类的私有.