Sdílet prostřednictvím


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

Důsledky spřátelené relace

Viz také

Referenční dokumentace

přítel (C++)