Friend Of Friend Site
The FRIENDS™ Experience is open in New York City, and will be opening in Atlanta on July 15th. Created by Warner Bros. And Superfly X, it’s an interactive celebration of the iconic TV show. Fans can step inside the world of FRIENDS™ and explore set recreations, view original props and costumes, and shop at The FRIENDS™ Experience Store. View the profiles of people named Find Friends. Join Facebook to connect with Find Friends and others you may know. Facebook gives people the power to. Our Friend: Directed by Gabriela Cowperthwaite. With Jason Segel, Isabella Kai, Violet McGraw, Casey Affleck. After receiving life-altering news, a couple finds unexpected support from their best friend, who puts his own life on hold and moves into their family home, bringing an impact much greater and more profound than anyone could have imagined. FriendFinder®, Friend Finder SM, FriendFinder Networks SM and the FriendFinder Networks logo are service marks of Various, Inc. This website is operated by Wight Enterprise Ltd. Webmasters, Earn Money! Careers Download the All FriendFinder mobile app. C Friend Functions. A friend function of a class is defined outside that class' scope but it has the right to access all private and protected members of the class. Even though the prototypes for friend functions appear in the class definition, friends are not member functions. A friend can be a function, function template, or member function.
- C++ Basics
- C++ Object Oriented
- C++ Advanced
- C++ Useful Resources
- Selected Reading
A friend function of a class is defined outside that class' scope but it has the right to access all private and protected members of the class. Even though the prototypes for friend functions appear in the class definition, friends are not member functions.
A friend can be a function, function template, or member function, or a class or class template, in which case the entire class and all of its members are friends.
To declare a function as a friend of a class, precede the function prototype in the class definition with keyword friend as follows −
To declare all member functions of class ClassTwo as friends of class ClassOne, place a following declaration in the definition of class ClassOne −
Consider the following program −
When the above code is compiled and executed, it produces the following result −
Language | ||||
Standard Library Headers | ||||
Freestanding and hosted implementations | ||||
Named requirements | ||||
Language support library | ||||
Concepts library(C++20) | ||||
Diagnostics library | ||||
Utilities library | ||||
Strings library | ||||
Containers library | ||||
Iterators library | ||||
Ranges library(C++20) | ||||
Algorithms library | ||||
Numerics library | ||||
Localizations library | ||||
Input/output library | ||||
Filesystem library(C++17) | ||||
Regular expressions library(C++11) | ||||
Atomic operations library(C++11) | ||||
Thread support library(C++11) | ||||
Technical Specifications |
General | ||||
Overview | ||||
class /struct types | ||||
union types | ||||
Injected-class-name | ||||
Members | ||||
Data members | ||||
Static members | ||||
The this pointer | ||||
Nested classes | ||||
Member templates | ||||
Bit fields | ||||
using -declarations | ||||
Member functions | ||||
Member access specifiers | ||||
Constructors and member initializer lists | ||||
Default member initializer(C++11) | ||||
friend specifier | ||||
explicit specifier | ||||
Converting constructor | ||||
Special member functions | ||||
Default constructor | ||||
Copy constructor | ||||
Move constructor(C++11) | ||||
Copy assignment operator | ||||
Move assignment operator(C++11) | ||||
Destructor | ||||
Inheritance | ||||
Base and derived classes | ||||
Empty base optimization | ||||
Virtual member functions | ||||
Pure virtual functions and abstract classes | ||||
override(C++11) | ||||
final(C++11) |
The friend declaration appears in a class body and grants a function or another class access to private and protected members of the class where the friend declaration appears.
[edit]Syntax
friendfunction-declaration | (1) | |
friendfunction-definition | (2) | |
friendelaborated-class-specifier; | (3) | |
friendsimple-type-specifier; friendtypename-specifier | (4) | (since C++11) |
[edit]Description
friend
declaration does not need to be previously declared.friend
declaration is ignored. This declaration will not forward declare a new type.[edit]Notes
Friendship is not transitive (a friend of your friend is not your friend).
Friendship is not inherited (your friend's children are not your friends).
Storage class specifiers are not allowed in friend function declarations. A function that is defined in the friend declaration has external linkage, a function that was previously defined, keeps the linkage it was defined with.
Access specifiers have no effect on the meaning of friend declarations (they can appear in private:
or in public:
sections, with no difference).
A friend class declaration cannot define a new class (friendclass X {}; is an error).
When a local class declares an unqualified function or class as a friend, only functions and classes in the innermost non-class scope are looked up, not the global functions:
A name first declared in a friend declaration within a class or class template X becomes a member of the innermost enclosing namespace of X, but is not visible for lookup (except argument-dependent lookup that considers X) unless a matching declaration at the namespace scope is provided - see namespaces for details.
[edit]Template friends
Both function template and class template declarations may appear with the friend
specifier in any non-local class or class template (although only function templates may be defined within the class or class template that is granting friendship). In this case, every specialization of the template becomes a friend, whether it is implicitly instantiated, partially specialized, or explicitly specialized.
Friend declarations cannot refer to partial specializations, but can refer to full specializations:
When a friend declaration refers to a full specialization of a function template, the keyword inline
and default arguments cannot be used.
A template friend declaration can name a member of a class template A, which can be either a member function or a member type (the type must use elaborated-type-specifier). Such declaration is only well-formed if the last component in its nested-name-specifier (the name to the left of the last ::
) is a simple-template-id (template name followed by argument list in angle brackets) that names the class template. The template parameters of such template friend declaration must be deducible from the simple-template-id.
In this case, the member of any specialization of A becomes a friend. This does not involve instantiating the primary template A: the only requirements are that the deduction of the template parameters of A from that specialization succeeds, and that substitution of the deduced template arguments into the friend declaration produces a declaration that would be a valid redeclaration of the member of the specialization:
Default template arguments are only allowed on template friend declarations if the declaration is a definition and no other declarations of this function template appear in this translation unit. | (since C++11) |
[edit]Template friend operators
A common use case for template friends is declaration of a non-member operator overload that acts on a class template, e.g. operator<<(std::ostream&, const Foo<T>&) for some user-defined Foo<T>
Such operator can be defined in the class body, which has the effect of generating a separate non-template operator<<
for each T
and makes that non-template operator<<
a friend of its Foo<T>
Output:
or the function template has to be declared as a template before the class body, in which case the friend declaration within Foo<T>
can refer to the full specialization of operator<<
for its T
:
[edit]Example
stream insertion and extraction operators are often declared as non-member friends
Output:
[edit]Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
CWG 45 | C++98 | members of a class nested in a friend class of T have nospecial access to T | a nested class has the same access as the enclosing class |
CWG 500 | C++98 | friend class of T cannot inherit from private or protectedmembers of T , but its nested class can | both can inherit from such members |
[edit]References
- C++11 standard (ISO/IEC 14882:2011):
- 11.3 Friends [class.friend]
- 14.5.4 Friends [temp.friend]
- C++98 standard (ISO/IEC 14882:1998):
- 11.3 Friends [class.friend]
- 14.5.3 Friends [temp.friend]
[edit]See also
Friend Of Friends 5sos
Class declaration | |
Access specifiers |