尽管阶级友谊是C++的最后一种解决方案之一,但这种模式是否有意义?
class Peer { public: friend class Peer; void GetSecret(const Peer& other) { const std::string& secret = other.GiveSecret(); std::cout << secret << std::endl; } private: const std::string& GiveSecret() const { return "secrety stuff"; } }; int main(int argc, char* argv[]) { Peer peerA; Peer peerB; peerA.GetSecret(peerB); return 0; }
好的,这种模式的原因是因为对等体都是相同的等级,并且他们需要彼此分享知识,但是这种知识是秘密的,因为除了对等体之外没有人应该使用它,或者程序不再有效.
一个非常真实的例子是,当一个对等体从另一个对等体复制构建时,它需要从其源对等体访问秘密信息,但同样没有其他人知道这些内部对象,只有对等体.
在这种情况下,朋友不是必需的.类的对象可以访问任何其他相同类型的对象的私有成员.没有朋友声明它应该工作得很好.