Kursusindhold
C++ OOP
C++ OOP
Friend-nøgleordet
Nøgleordet friend
fungerer som en unik konstruktion, der adskiller sig fra de almindelige indkapslingsprincipper i objektorienteret programmering. Det tillader en funktion eller en anden class
at få adgang til private
og protected
medlemmer af en class
.
main.cpp
#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(); }
Denne tilgang bryder indkapslingen, fordi den tillader eksterne enheder at få adgang til class
-medlemmer. Der kan dog være situationer, hvor det er nødvendigt. For eksempel:
KeyManager.h
class KeyManager { public: KeyManager(const std::string& key) : encryptionKey(key) {} private: std::string encryptionKey; };
encryptionKey holdes som private
, og der gives ikke nogen accessor-metode, fordi vi ønsker at forhindre ekstern adgang til den udefra class
. Men hvad nu hvis der er behov for at bruge en ekstern algoritme til kryptering og dekryptering, så er det her friend-keyword
kommer i spil.
KeyManager.h
CryptographicAlgorithm.h
#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; };
Den mest almindelige anvendelse af friend
-nøgleordet opstår, når hurtige løsninger er nødvendige, og du har til hensigt at refaktorere det senere. Det er at foretrække at designe dine class
-relationer uden at være afhængig af det, selvom specifikke scenarier stadig kan forekomme.
Tak for dine kommentarer!