Friend-avainsana
friend-avainsana on ainutlaatuinen rakenne, joka poikkeaa olio-ohjelmoinnin tavanomaisista kapselointiperiaatteista. Sen avulla funktio tai toinen class voi käyttää private-tyypin protected- ja class-jäseniä.
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-jäseniin. On kuitenkin tilanteita, joissa tämä voi olla tarpeen. 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 käyttömetodia, koska halutaan estää ulkoinen pääsy siihen luokan ulkopuolelta class. Mutta entä jos on tarve käyttää ulkoista algoritmia salaukseen ja purkuun, tällöin 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; };
Yleisin käyttötapaus friend-avainsanalle ilmenee, kun tarvitaan nopeita korjauksia ja aiot myöhemmin refaktoroida koodin. On suositeltavaa suunnitella class-suhteet ilman sen käyttöä, vaikka tietyissä tilanteissa sen käyttö voi silti 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. Sen avulla funktio tai toinen class voi käyttää private-tyypin protected- ja class-jäseniä.
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-jäseniin. On kuitenkin tilanteita, joissa tämä voi olla tarpeen. 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 käyttömetodia, koska halutaan estää ulkoinen pääsy siihen luokan ulkopuolelta class. Mutta entä jos on tarve käyttää ulkoista algoritmia salaukseen ja purkuun, tällöin 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; };
Yleisin käyttötapaus friend-avainsanalle ilmenee, kun tarvitaan nopeita korjauksia ja aiot myöhemmin refaktoroida koodin. On suositeltavaa suunnitella class-suhteet ilman sen käyttöä, vaikka tietyissä tilanteissa sen käyttö voi silti olla tarpeen.
Kiitos palautteestasi!