Friend function: Difference between revisions

Content deleted Content added
No edit summary
Tags: Mobile edit Mobile web edit
m Use cases: consistently "method" (already three times in the intro and also category)
 
(20 intermediate revisions by 16 users not shown)
Line 1:
In [[object-oriented programming]], a '''friend function''', that is a "friend" of a given [[class (computer science)|class]], is a function that is given the same access as methods to private and protected [[data]].<ref>{{cite book|last=Holzner|first=Steven|title=C++ : Black Book|year=2001|publisher=Coriolis Group|___location=Scottsdale, Ariz.|isbn=1-57610-777-9|page=397|quote=When you declare a function a friend of a class, that function has access to the internal data members of that object (that is, its protected, and private data members.)}}
<ref>{{cite book|last=Holzner|first=Steven|title=C++ : Black Book|year=2001|publisher=Coriolis Group|___location=Scottsdale, Ariz.|isbn=1-57610-777-9|page=397|quote=When you declare a function a friend of a class, that function has access to the internal data members of that object (that is, its protected, and private data members.)}}
</ref>
 
Line 9 ⟶ 8:
==Use cases==
This approach may be used in friendly function when a function needs to access private data in objects from two different classes.
This may be accomplished in two similar ways:
*aA function of global or [[namespace]] scope may be declared as friend of both classes.
*aA member functionmethod of one class may be declared as friend of another one.
<sourcesyntaxhighlight lang=Cpp"cpp">
// C++ implementation of friend functions.
#include <iostream>
using namespace std;
class Foo; // Forward declaration of class Foo in order for example to compile.
 
class Bar {
private:
int a = 0;
public:
Bar(): a(0) {}
void show(Bar& x, Foo& y);
friend void show(Bar& x, Foo& y); // declaration of global function as friend
};
class Foo {
private:
int b = 6;
public:
friend void Bar::show(Bar& x, Foo& y); // declaration of friendglobal fromfunction other classas friend
Foo(): b(6) {}
friend void Bar::show(Bar& x, Foo& y); // declaration of global friend from other class
friend void Bar::show(Bar& x, Foo& y); // declaration of friend from other class
};
// Definition of a member functionmethod of Bar; this member is a friend of Foo
void Bar::show(Bar& x, Foo& y) {
cout << "Show via function member of Bar" << endl;
Line 56 ⟶ 55:
a.show(a,b);
}
</syntaxhighlight>
</source>
 
==References==
Line 64 ⟶ 63:
==External links==
*[http://www.codersource.net/c/ctutorials/ctutorialfriend.aspx C++ friend function tutorial] at CoderSource.net
*[http://www.cplusplus.com/doc/tutorial/inheritance.html C++ friendship and inheritance tutorial] at cplusplus.com
 
[[Category:Method (computer programming)]]