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
1234567891011121314151617#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
123456class 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
12345678910#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!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 3.13
Friend-avainsana
Pyyhkäise näyttääksesi valikon
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
1234567891011121314151617#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
123456class 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
12345678910#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!