Klasa zaprzyjaźniona w C++
Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji
Klasa zaprzyjaźniona to klasa, której inna klasa nadała specjalne uprawnienia dostępu. Dzięki deklaracji friend class może ona korzystać z elementów private i protected klasy, która ją zaprzyjaźniła.
Nie oznacza to, że wszystkie składniki klasy zaprzyjaźnionej są publiczne. Oznacza tylko, że jedna konkretna klasa otrzymuje dostęp do ukrytych danych innej klasy.
Składnia
class Konto {
private:
double saldo;
public:
Konto(double s) : saldo(s) {}
friend class Audytor;
};
class Audytor {
public:
double sprawdzSaldo(Konto k) {
return k.saldo; // dostęp do pola private klasy Konto
}
};
W przykładzie klasa Audytor może odczytać prywatne pole saldo, ponieważ klasa Konto zadeklarowała ją jako zaprzyjaźnioną.
Ważne cechy
- przyjaźń deklaruje klasa udostępniająca swoje dane,
- przyjaźń nie jest automatycznie obustronna,
- przyjaźń nie jest dziedziczona,
- przyjaźń nie jest przechodnia,
- należy jej używać ostrożnie, bo osłabia hermetyzację.
Zastosowanie
Klasy zaprzyjaźnione stosuje się wtedy, gdy dwie klasy są silnie powiązane implementacyjnie, np. klasa kontenera i klasa iteratora albo klasa reprezentująca dane i klasa wykonująca ich specjalistyczną obsługę.
Na egzaminie najważniejsze jest skojarzenie: klasa zaprzyjaźniona ma dostęp do prywatnych i chronionych elementów innej klasy.