| Časová náročnost: 6 minut |
Někdy můžeme chtít, aby měla funkce přístup k privátním členům třídy bez toho, aby byla členem třídy. Proto C++ definuje
spřátelené funkce. Spřátelená funkce není členem třídy, ale má přístup k jejím privátním prvkům.
Spřátelená funkce je definována jako řádná funkce bez členů. Uvnitř deklarace třídy, jejímž bude přítelem, je zahrnut také její prototyp s klíčovým slovem
friend.
V následujícím příkladu deklarujeme
myclass() uvnitř její konstruktor a jejího přítele. Protože jde o přítele má přístup k jejím privátním členům.
| Příklad 4.6. |
|
#include <iostream.h>
class myclass {
int n, d;
public:
myclass(int i, int j) { n = i; d = j; }
friend int isfactor(myclass ob); //spratelena funkce
};
int isfactor(myclass ob)
{
if(!(ob.n % ob.d)) return 1;
else return 0;
}
int main()
{
myclass ob1(10, 2), ob2(13, 3);
if(isfactor(ob1)) cout << "10 je delitelne 2\n";
else cout << "10 neni delitelne 2\n";
if(isfactor(ob2)) cout << "13 je delitelne 3\n";
else cout << "13 neni delitelne 3\n";
return 0;
}
|
|
Musíme si uvědomit, že spřátelená funkce není členem třídy jejímž je přítelem. Není tedy možné volat spřátelenou funkci s využitím jména objektu a tečkového či šipkového operátoru. Přestože tedy spřátelená funkce zná privátní prvky třídy, s níž je spřátelená, může k nim přistupovat pouze přes objekty třídy.
Spřátelená funkce není dědičná. Proto, když základní třída obsahuje spřátelenou funkci, pak tato třída není spřátelena s odvozenou funkcí. Dále platí že spřátelená funkce může být spřátelena s více třídami.
|
| Flashová animace |
|
Kliknutím na ikonu spustíte animaci.
|