3-1-5. フレンド関数

公開日: 11:47 3. オブジェクト指向編/3-1. クラスとオブジェクト/3-1-5. フレンド関数

クラスのフレンド関数はクラスのスコープ外で定義されますが、クラスのすべてのprivateとprotectedメンバへアクセスできる権限を持ちます。フレンド関数のプロトタイプがクラス定義にあっても、フレンドはメンバ関数ではありません。

フレンドは関数、関数テンプレート、メンバ関数、クラス、クラステンプレートとなることができます。その場合、クラス全体とすべてのメンバはフレンドとなります。

クラスのフレンドとして関数を宣言するにはクラス定義内の関数プロトタイプの頭にfriendキーワードをつけます。
class Box
{
   double width;
public:
   double length;
   friend void printWidth( Box box );
   void setWidth( double wid );
};

ClassTwoクラスのすべてのメンバ関数をClassOneクラスのfriendと宣言するには、ClassOneクラスの定義内に次の宣言を書きます。
friend class ClassTwo;

プログラムを見ていきます。
#include <iostream>
 
using namespace std;
 
class Box
{
   double width;
public:
   friend void printWidth( Box box );
   void setWidth( double wid );
};

// メンバ関数の定義
void Box::setWidth( double wid )
{
    width = wid;
}

// 注意: printWidth()はどのクラスのメンバでもありません。
void printWidth( Box box )
{
   // printWidth()はBoxのフレンドなのでBoxのメンバへ直接アクセス可能
   cout << "箱の幅 : " << box.width <<endl;
}
 
// プログラムの開始
int main( )
{
   Box box;
 
   // メンバ関数を使わずに箱の幅をセット
   box.setWidth(10.0);
   
   // 箱の幅を出力するのにfriend関数を仕様
   printWidth( box );
 
   return 0;
}
上のコードをコンパイルし実行すると、次の結果が得られます。
箱の幅 : 10
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿