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

bookFriend-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

main.cpp

copy
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

KeyManager.h

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

KeyManager.h

CryptographicAlgorithm.h

CryptographicAlgorithm.h

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

question mark

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

Select the correct answer

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

Suggested prompts:

Can you give an example of how the friend keyword is used in code?

What are some alternatives to using the friend keyword?

Are there any risks or drawbacks to using the friend keyword?

Awesome!

Completion rate improved to 3.13

bookFriend-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

main.cpp

copy
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

KeyManager.h

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

KeyManager.h

CryptographicAlgorithm.h

CryptographicAlgorithm.h

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

question mark

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

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 6
some-alt