Funkce členů třídy a třídy jako přátelé
Funkce členů třídy lze deklarovat jako přátelé v jiných třídách.Příklad:
// classes_as_friends1.cpp
// compile with: /c
class B;
class A {
public:
int Func1( B& b );
private:
int Func2( B& b );
};
class B {
private:
int _b;
// A::Func1 is a friend function to class B
// so A::Func1 has access to all members of B
friend int A::Func1( B& );
};
int A::Func1( B& b ) { return b._b; } // OK
int A::Func2( B& b ) { return b._b; } // C2248
V předchozím příkladu pouze funkci A::Func1( B& ) je udělen přístup přítele do třídy B.Proto přístup k soukromý člen _b správné v Func1 třídy A , ale není v Func2.
A friend je třída třídy jsou všechny funkce členů, jejichž funkce přítele třídy, jejichž funkce členů mít přístup k soukromé a chráněné členy jiné třídy.Předpokládejme, že friend prohlášení v třídě B byla:
friend class A;
V tomto případě všechny členské funkce třídy A by byl udělen přítele do třídy B.Následující kód je příkladem třídy přítele:
// classes_as_friends2.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class YourClass {
friend class YourOtherClass; // Declare a friend class
public:
YourClass() : topSecret(0){}
void printMember() { cout << topSecret << endl; }
private:
int topSecret;
};
class YourOtherClass {
public:
void change( YourClass& yc, int x ){yc.topSecret = x;}
};
int main() {
YourClass yc1;
YourOtherClass yoc1;
yc1.printMember();
yoc1.change( yc1, 5 );
yc1.printMember();
}
Přátelství není vzájemné, pokud není výslovně uvedeno.V tomto příkladu funkce členů z YourClass nelze získat přístup k soukromým členy YourOtherClass.
Spravované typu nemůže mít žádné funkce přítele, přítele tříd nebo rozhraní přítele.
Přátelský nejsou zděděny, což znamená, že třídy odvozené z YourOtherClass nelze získat přístup k YourClass's private členy.Přátelství není přenosné, takže tříd, které jsou přátelé YourOtherClass nelze získat přístup k YourClass's private členy.
Následující obrázek ukazuje čtyři deklarace tříd: Base, Derived, aFriend, a anotherFriend.Pouze třídy aFriend s přímým přístupem k soukromé členové Base (a všechny členy Base může převzít).
Důsledky přítele vztah