a.
class snap { friend clasp; ... }; class clasp { ... };
b.
class cuff { public: void snip(muff &) { ... } ... }; class muff { friend void cuff::snip(muff &}; ... };
c.
class muff { friend void cuff::snip(muff &); }; class cuff { public: void snip(muff &) { ... } };
friend class clasp;
b. 这需要一个前向声明,以便编译器能够解释void snip (muff&):
c. 首先,cuff类声明应在muff类之前,以便编译器可以理解cuff::snip()。其次,编译器需要muff的一个前向声明,以便可以理解snip(muff &)。