// friends.cpp #include using namespace std; class A1; // incomplete type definition needed because B1 refers to A1 // and A1 refers to B1 class B1 { public: B1(int pub, int pri){b1pub=pub; b1pri=pri;} void B1_out(A1 aa); int b1pub; private: int b1pri; }; class A1 { friend B1; // says B1 can access this classes private part public: A1(int pub, int pri){a1pub=pub; a1pri=pri;} void A1_out(B1 bb); int a1pub; private: int a1pri; }; void A1::A1_out(B1 bb) { cout << "A1_out " << a1pub << a1pri << bb.b1pub /* << bb.b1pri */ << '\n'; // B1 public OK ----- ----- no private } void B1::B1_out(A1 aa) { cout << "B1_out " << b1pub << b1pri << aa.a1pub << aa.a1pri << '\n'; // both public and private OK because of 'friend' } int main(void) { A1 a(1,2); B1 b(3,4); cout << "friends.cpp \n"; a.A1_out(b); b.B1_out(a); return 0; } // results: friends.cpp // A1_out 123 // B1_out 3412