月曜日, 2月 25, 2008

C++解説14(クラスについて5)

1. 友達を作ろう

今まで、クラスについていろいろと説明をして来ましたが、
最後にフレンド関数、フレンドクラスについて説明します。
名前の通り、友達関数、友達クラスという事になりますが
実際にどのような機能になるかというと、非公開情報に対して
友達だけには公開してあげようという概念になります。

--------------------------------------------------------------------------------
#include "iostream"


class Human {
private:
int age_;
public:
Human(int InitAge) : age_(InitAge) {}
int getAge(void) { return age_; }
friend void AddAge(Human&);
};

void AddAge(Human& obj) {
obj.age_++;
}

int main(void) {
Human obj(10);
std::cout << "Age = " << obj.getAge() << std::endl;
AddAge(obj);
std::cout << "Age = " << obj.getAge() << std::endl;
}
--------------------------------------------------------------------------------
実行結果
--------------------------------------------------------------------------------
Age = 10
Age = 11
--------------------------------------------------------------------------------

というようにfriendで宣言された関数はクラスのprivate変数に対してのアクセスを許可されています。
friendは関数だけではなく、クラスそのものも友達として宣言する事ができます。

class Human {
private:
public:
friend class sample;
};

このように記述されている場合はsampleはHumanのprivate変数にも関数にもアクセスする事が可能となります。

friendは簡単な文法の癖して以外と難しいのではないかと思っています。
どれをfriendとするかという問題には私Sennaは常にぶち当たっています。
friendとする多くの関数やクラスにfriendとする意味を感じないのです。
上記にはfriend関数の例を記述していますが、はっきり言ってfriendとして記述する必要性はまったくありません。
従って、あまり言い例とお世辞にも言えないのです。

クラス間の関係を精査しどれがfriendクラス、関数となるのか
また、必要がないのか?などど言った問題を整理してからfriendというキーワードを使用する事にしましょう。

クラス説明については一応終了です。

0 件のコメント: