C++ class, friendship

Friends are functions or classes declared with the friend keyword. It allows


Code Example


Explanation

A class with private members:

class ClassWithPrivateMembers {
private: // private members
  int privateVariable = 20;
  void privateFunc() { cout << "this is a private function" << endl; }

  // friendship
  friend void friendFunc(ClassWithPrivateMembers);
  friend class FriendClass;
};      

Friend Function friendFunc

void friendFunc(ClassWithPrivateMembers obj) { // friend function
        obj.privateFunc(); // access private func
        cout << "Accessing private variable from friend function: val = " << obj.privateVariable << endl;
      }      
    

Friend Class FriendClass:

class FriendClass { // friend class
public:
  void operator()(ClassWithPrivateMembers obj) {
    obj.privateFunc(); // access private func
    cout << "Accessing private variable from friend class: val = " << obj.privateVariable << endl;
  }
};  

Main function

int main() {
  ClassWithPrivateMembers objWithPrivateMembers; // obj with private members
  FriendClass friendObj; // object of friend class
  friendObj(objWithPrivateMembers);
  friendFunc(objWithPrivateMembers);
  return 0;
}  

Conclusion

Class friendship is a powerful feature in C++ that allows for closer integration between classes and functions. It can be useful in scenarios where encapsulation needs to be broken to allow specific classes or functions to access private data, while still maintaining overall data protection.