第19章 フレンドクラス


今回は簡単です。前回のフレンド関数を やりましたが、クラスAのメンバ関数がすべてクラスBのフレンド関数 である時、クラスAをクラスBのフレンドクラスといいます。

friend class A;

のように書きます。 早速例題を見てみましょう。

#include <iostream.h> #include <string.h> class CatClass { friend class DogClass; int asi; char nya[32]; public: CatClass(); void show(); }; class DogClass { int legs; char wan[32]; public: DogClass(); void koe(CatClass cat); void koe(); }; void CatClass::show(void) { cout << "asi = " << asi << endl; cout << "koe = " << nya << endl; return; } CatClass::CatClass(void) { asi = 4; strcpy(nya, "ニャー、ニャー"); } DogClass::DogClass(void) { legs = 4; strcpy(wan, "ワンワン"); } void DogClass::koe(CatClass cat) { cout << "鳴き声= " << cat.nya << endl; return; } void DogClass::koe(void) { cout << "鳴き声= " << wan << endl; return; } int main(void) { DogClass Pochi; CatClass Tama; cout << "[Tama の特徴]" << endl; Tama.show(); cout << "[Pochiの鳴き声]" << endl; Pochi.koe(); cout << "[Tamaの鳴き声]" << endl; Pochi.koe(Tama); return 0; }

上の例題で、CatClassクラスの定義中に DogClassクラスがフレンドクラスであると宣言されています。

DogClassクラスのなかで、koe関数がオーバーロードされている ことに注意して下さい。引数がなければ自分のクラスのメンバである wanを表示します。引数を取るときは他人の?クラスのデータメンバ nyaを表示します。nyaはプライベートですから他からはアクセスできません。 しかし、DogClassはCatClassのフレンドクラスですからこのような ことが可能です。しかし、逆はできません。

友情(friend)は一方通行です


うーん。いつもあまり意味のないプログラムだなー。

[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Jan/24/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。