Friend class
A friend class in C++ can access the private and protected members of the class in which it is declared as a friend.[1]
Rationale
Friendship may allow a class to be better encapsulated by granting per-class access to parts of its API that would otherwise have to be public.[2] This increased encapsulation comes at the cost of tighter coupling due to interdependency between the classes.[3]
Example
class B {
friend class A; // A is a friend of B
private:
int i;
};
class A {
public:
A(B b) {
b.i = 0; // legal access due to friendship
}
};
Properties
- Friendships are not symmetric – if class
A
is a friend of classB
, classB
is not automatically a friend of classA
. - Friendships are not transitive – if class
A
is a friend of classB
, and classB
is a friend of classC
, classA
is not automatically a friend of classC
. - Friendships are not inherited – if class
Base
is a friend of classX
, subclassDerived
is not automatically a friend of classX
; and if classX
is a friend of classBase
, classX
is not automatically a friend of subclassDerived
.
See also
References
External links
- http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr043.htm
- http://www.cplusplus.com/doc/tutorial/inheritance/
This article is issued from Wikipedia - version of the 11/6/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.