Kurssisisältö
C++ OOP
C++ OOP
Friend-avainsana
friend
-avainsana on ainutlaatuinen rakenne, joka poikkeaa olio-ohjelmoinnin tavanomaisista kapselointiperiaatteista. Se mahdollistaa funktion tai toisen class
:n pääsyn private
- ja protected
-jäseniin class
:ssa.
main.cpp
#include <iostream> class Example { private: const static int static_private_member = 0; friend void func(); // grants access to the private members to func() }; void func() { std::cout << Example::static_private_member; } int main() { func(); }
Tämän lähestymistavan käyttäminen rikkoo kapselointia, koska se sallii ulkopuolisten tahojen päästä käsiksi class
:n jäseniin. On kuitenkin tilanteita, joissa tämä voi olla tarpeellista. Esimerkiksi:
KeyManager.h
class KeyManager { public: KeyManager(const std::string& key) : encryptionKey(key) {} private: std::string encryptionKey; };
encryptionKey pidetään private
-nä, eikä sille ole tarjottu accessor-metodia, koska haluamme estää ulkoisen pääsyn class
-ulkopuolelta. Mutta entä jos on tarve käyttää ulkoista algoritmia salaukseen ja purkuun? Tässä kohtaa friend keyword
tulee käyttöön.
KeyManager.h
CryptographicAlgorithm.h
#include "CryptographicAlgorithm.h" class KeyManager { public: KeyManager(const std::string& key) : encryptionKey(key) {} private: std::string encryptionKey; // Allow CryptographicAlgorithm access to private members friend class CryptographicAlgorithm; };
friend
-avainsanaa käytetään yleisimmin tilanteissa, joissa tarvitaan pikakorjauksia, ja aiot myöhemmin refaktoroida koodin. On suositeltavaa suunnitella class
-suhteet ilman sen käyttöä, vaikka tietyissä tapauksissa sen käyttö voi olla tarpeen.
Kiitos palautteestasi!