Cursusinhoud
C++ OOP
C++ OOP
Het Friend-sleutelwoord
Het sleutelwoord friend
is een uniek construct, dat afwijkt van de standaardprincipes van encapsulatie binnen objectgeoriënteerd programmeren. Het stelt een functie of een andere class
in staat om toegang te krijgen tot de private
en protected
leden van een 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(); }
Het gebruik van deze benadering doorbreekt de encapsulatie omdat het externe entiteiten toegang geeft tot de leden van de class
. Er kunnen echter situaties zijn waarin dit noodzakelijk is. Bijvoorbeeld:
KeyManager.h
class KeyManager { public: KeyManager(const std::string& key) : encryptionKey(key) {} private: std::string encryptionKey; };
De encryptionKey wordt private
gehouden, en er is geen accessor-methode voorzien omdat we externe toegang van buitenaf tot de class
willen voorkomen. Maar wat als er noodzaak is om een extern algoritme te gebruiken voor het versleutelen en ontsleutelen? Dan komt het friend-keyword
van pas.
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; };
Het meest voorkomende gebruik van het friend
-keyword ontstaat wanneer snelle oplossingen nodig zijn en je van plan bent om dit later te refactoren. Het is aan te raden om je class
-relaties te ontwerpen zonder hiervan afhankelijk te zijn, hoewel specifieke scenario's zich nog steeds kunnen voordoen.
Bedankt voor je feedback!