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

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

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-jäseniin. On kuitenkin tilanteita, joissa tämä voi olla tarpeen. 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 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

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; };

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.

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

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

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-jäseniin. On kuitenkin tilanteita, joissa tämä voi olla tarpeen. 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 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

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; };

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.

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