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:n 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ä lähestymistapa rikkoo kapselointia, koska se sallii ulkopuolisten tahojen käyttää class-jäseniä. 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-muuttujana, eikä sille ole tarjolla pääsymalustaa, koska halutaan estää ulkoinen pääsy class-ulkopuolelta. Mutta entä jos salaukseen ja purkuun on tarpeen käyttää ulkoista algoritmia? Tässä kohtaa friend keyword astuu kuvaan.
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 friend-avainsanan käyttötapa liittyy tilanteisiin, joissa tarvitaan nopeita korjauksia, ja aiot myöhemmin refaktoroida koodin. On suositeltavaa suunnitella class-suhteet ilman sen käyttöä, vaikka tietyissä tapauksissa sitä saatetaan silti tarvita.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme