Handling friendship with the attorney-client idiom
Granting functions and classes access to the non-public parts of a class with a friend declaration has been usually seen as a sign of bad design, as friendship breaks encapsulation and ties classes and functions. Friends, whether they are classes or functions, get access to all the private parts of a class, although they may only need to access parts of it.
The attorney-client idiom provides a simple mechanism to restrict friends access to only designated private parts of a class.
Getting ready
To demonstrate how to implement this idiom, we will consider the following classes: Client
, which has some private member data and functions (the public interface is not important here), and Friend
, which is supposed to access only parts of the private details, for instance, data1
and action1()
, but has access to everything:
class Client
{
int data_1;
int data_2;
void action1() {}
void action2() {}
friend class...