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
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(); }
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
123456class 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
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; };
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!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat