C ++ ---フレンド関数とフレンドクラス

フレンド機能

プログラムの効率を上げるには、関数がクラスのプライベート部分にアクセスする必要があります。
フレンド関数自体はどのクラスにも属していません。
フレンド関数はカプセル化の例外です。フレンド
の定義と使用関数
1。クラスの定義に含まれるために友達を宣言するには、friendキーワードを追加する必要があります。
例:

class CComplex//复数类
{
    
    
private:
    float r,i;
public:
    CComplex(float x=0,float y=0);
    ~CComplex();
    friend void PrintComplex(CComplex c);
};

void PrintComplex(CComplex c)//实现在类的外部
{
    
    
    cout<<c.r<<"+"<<c.i<<"i"<<endl;
}

2.フレンド関数は、複数のクラスのフレンド関数になることができます。特定のクラスのフレンド関数になると、クラスのすべてのメンバー関数にアクセスできます。3。
フレンド関数の呼び出しメソッドは、一般的な関数。;4。C
++では、デストラクタ、コンストラクタ、および仮想関数をフレンド関数にすることはできません。

友元类:

クラスAが別のクラスBのフレンドクラスとして宣言されている場合、BのメンバーはAによって使用できます。
フレンドクラスの定義は次のとおりです。

friend class 类名;

フレンドクラスインスタンス:

#include <iostream>
#include<string.h>
using namespace std;

class CData
{
    
    
public:
    CData(char *str,int i);
private:
    friend class CShow;//说明友元类CShow;
    char *name;
    int age;
};
CData::CData(char *str,int i):age(i)//注意初始化age的方式!!!
{
    
    
    name=new char(strlen(str)+1);
    strcpy(name,str);
}

class CShow//友元类CShow用来show
{
    
    
public:
    void show(CData x);
};
void CShow::show(CData x)//输出信息
{
    
    
    cout<<"name:"<<x.name<<endl;
    cout<<"age:"<<x.age<<endl;
}

int main()
{
    
    
    CData ob1("liding",21);
    CShow show1;
    show1.show(ob1);
    return 0;
}

注:友情関係は相互的でも推移的でもありません!

おすすめ

転載: blog.csdn.net/timelessx_x/article/details/114591618