Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Friend-avainsana | Kapseloinnin Yleiskatsaus
C++ OOP

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

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

KeyManager.h

123456
class 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

KeyManager.h

CryptographicAlgorithm.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.

question mark

Mihin tarkoitukseen friend-avainsanaa käytetään?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 3. Luku 6
some-alt