C++:クラスの使用例(2)> フレンド関数についての基本

C++でクラスでフレンド関数を使用するときのメモ。

フレンド関数

フレンド関数を使用すると、2つ以上のクラスの非公開メンバにアクセスすることが出来る。

フレンド関数のサンプルコード

#include <iostream>
using namespace std;

class SampleClass {
    int a, b;
public:
    SampleClass(int i, int j) { a = i; b = j; }
    
public:
    // フレンド関数のプロトタイプ宣言(フレンドキーワードあり)
    friend int sum_it(SampleClass obj);
};

// フレンド関数の定義(フレンドキーワードなし)
int sum_it(SampleClass obj)
{
    // クラスの非公開メンバにアクセスし2つの値の和を返す
    return obj.a + obj.b;
}

int main(int argc, const char * argv[])
{
    int x,y;
    
    cout << "1つめの整数を入力 : ";
    cin >> x;
    cout << "2つめの整数を入力 : ";
    cin >> y;
    
    SampleClass sample(x,y);
    
    cout << "合計 : " << sum_it(sample);
    
    return 0;
}
[/code]
</dd>
<dt>結果</dt>
<dd>
[code]
1つめの整数を入力 : 10
2つめの整数を入力 : 100
合計 : 110

サンプルコードの補足説明

  • SampleClass の宣言の中でコンストラクタ関数と、フレンド関数 sum_it() を宣言している。
  • sum_it()関数は SampleClass のフレンドであるが、フレンドであるクラス SampleClass のメンバではない。そのため obj.sum_it(); のようにアクセス演算子を使用しフレンド関数を呼び出すことはできない。
  • フレンド関数からフレンドであるクラスの非公開要素にアクセスするためには、そのクラスのオブジェクトを介さなければいけない。
  • フレンド関数は継承されないため、基本クラスにフレンド関数が含まれていても、派生クラスのフレンド関数にはならない。
  • フレンド関数は複数のクラスのフレンドになることができる。

まとめ

フレンド関数はオブジェクトを介せば複数クラスのメンバにアクセスし、異なるクラスの中の共通する要素を評価するといった使い方もできます。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents