Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Friend-nøgleordet | Oversigt Over Indkapsling
C++ OOP

book
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

main.cpp

copy
#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();
}
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

KeyManager.h

copy
class KeyManager {
public:
KeyManager(const std::string& key) : encryptionKey(key) {}
private:
std::string encryptionKey;
};
123456
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

KeyManager.h

CryptographicAlgorithm.h

CryptographicAlgorithm.h

copy
#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;
};
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.

question mark

Hvad bruges friend-nøgleordet til?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 6

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

some-alt