フレンド関数・friend
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
クラスのメンバ関数でない、通常のルーチン関数から、クラス内のprivate宣言のメンバにアクセスするには、通常のルーチン関数をfriendキーワードで宣言することが必要です。
クラスは、自分のフレンド関数(friend)を指定することで、クラスの外側の関数が、クラス内のprivateメンバにアクセス可能となります。
スポンサーリンク
以下のfriend_testクラスでは、ルーチンのdisplay(const friend_test& obj)を、friend宣言しています。
これにより、display(const friend_test& obj)は、friend_testクラスのprivateメンバである、years, monthのデータにアクセス可能となります。
#include <iostream> class friend_test { private: int years; // 年 int month; // 月 public: // 年と月をセット void set(const int y, const int m); // フレンドする friend void display(const friend_test& obj); }; // 年と月をセットするメンバ関数 inline void friend_test::set(const int y, const int m) { years = y; month = m; } // 年と月を表示するルーチン void display(const friend_test& obj) { std::cout << "years : " << obj.years << "\n"; std::cout << "month : " << obj.month << "\n"; } // メインルーチン int main() { // オブジェクト生成 class friend_test a_friend; // 年月をセット a_friend.set(2008, 6); // 年月を表示 display(a_friend); return 0; }
実行結果。
years : 2008 month : 6
もし、friendキーワードがなかったら、「privateメンバにアクセスできません。」とコンパイルエラーが起こります。
スポンサーリンク
>> 次の記事 : フレンドクラス・friend
<< 前の記事 : クラスの中にメンバ関数(メソッド)を実装する
- - 関連記事 -
- 派生クラスのコンストラクタ・デストラクタ
- 派生クラスによる関数の隠蔽
- 仮想クラス
- 抽象クラス
- 仮想関数・virtualキーワード
- 親クラスの引数ありコンストラクタを子クラスから初期化・動的サイズのスタック
- クラスのアクセス制限キーワード・private, protected, public
- スタックを実装したクラスを拡張する
- クラス継承・親クラスと子クラス
- static・静的メンバ関数
- static・静的メンバ変数
- 定数のconstメンバ関数をクラスに宣言
- 定数のconstメンバ変数をクラスに宣言
- フレンドクラス・friend
- クラスの中にメンバ関数(メソッド)を実装する
- explicit・コンストラクタを明示する
- クラスで自動的に生成されるメンバ関数
- コピーコンストラクタ
- 引数つきのコンストラクタを持つクラス定義
- コンストラクタで自動的に初期化する
スポンサーリンク