A Palavra-Chave Friend
A palavra-chave friend representa um recurso único, oferecendo uma exceção aos princípios padrão de encapsulamento da programação orientada a objetos. Ela permite que uma função ou outra class acesse membros private e protected de uma 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(); }
O uso dessa abordagem quebra o encapsulamento porque permite que entidades externas acessem os membros da class. No entanto, podem existir situações em que isso seja necessário. Por exemplo:
KeyManager.h
123456class KeyManager { public: KeyManager(const std::string& key) : encryptionKey(key) {} private: std::string encryptionKey; };
A encryptionKey é mantida como private, e não há um método de acesso fornecido porque deseja-se impedir o acesso externo a ela de fora da class. Mas e se houver a necessidade de usar um algoritmo externo para criptografar e descriptografar? É nesse caso que o friend keyword entra em cena.
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; };
O uso mais comum da palavra-chave friend ocorre quando são necessárias correções rápidas, com a intenção de refatorar posteriormente. É preferível projetar os relacionamentos entre suas class sem depender dela, embora cenários específicos ainda possam ocorrer.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you give an example of how the friend keyword is used in code?
What are some alternatives to using the friend keyword?
Are there any risks or drawbacks to using the friend keyword?
Incrível!
Completion taxa melhorada para 3.13
A Palavra-Chave Friend
Deslize para mostrar o menu
A palavra-chave friend representa um recurso único, oferecendo uma exceção aos princípios padrão de encapsulamento da programação orientada a objetos. Ela permite que uma função ou outra class acesse membros private e protected de uma 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(); }
O uso dessa abordagem quebra o encapsulamento porque permite que entidades externas acessem os membros da class. No entanto, podem existir situações em que isso seja necessário. Por exemplo:
KeyManager.h
123456class KeyManager { public: KeyManager(const std::string& key) : encryptionKey(key) {} private: std::string encryptionKey; };
A encryptionKey é mantida como private, e não há um método de acesso fornecido porque deseja-se impedir o acesso externo a ela de fora da class. Mas e se houver a necessidade de usar um algoritmo externo para criptografar e descriptografar? É nesse caso que o friend keyword entra em cena.
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; };
O uso mais comum da palavra-chave friend ocorre quando são necessárias correções rápidas, com a intenção de refatorar posteriormente. É preferível projetar os relacionamentos entre suas class sem depender dela, embora cenários específicos ainda possam ocorrer.
Obrigado pelo seu feedback!