Friendキーワード
メニューを表示するにはスワイプしてください
friend キーワードは、オブジェクト指向プログラミングの標準的なカプセル化原則から逸脱する独自の構造体。関数や他の class が、ある private の protected および 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(); }
この手法を使用するとカプセル化が破られる。なぜなら、外部のエンティティが class メンバーへアクセスできるようになるため。ただし、このような対応が必要となる場合もある。例えば:
KeyManager.h
123456class KeyManager { public: KeyManager(const std::string& key) : encryptionKey(key) {} private: std::string encryptionKey; };
encryptionKey は private として保持されており、アクセサメソッドも提供されていません。これは、class の外部からのアクセスを防ぐためです。しかし、暗号化や復号化のために外部アルゴリズムを使用する必要がある場合、friend keyword が役立ちます。
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; };
friendキーワードの最も一般的な使用例は、迅速な修正が必要な場合に発生し、後でリファクタリングすることを意図している場合です。class間の関係は、できるだけこのキーワードに依存せずに設計することが望ましいですが、特定の状況では使用されることもあります。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 6
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 6