0

C++ でフレンド関数の学習を始めたばかりです。これは、概念探索に使用しているプログラムです。

#include<iostream>

using namespace std;

class one
{
private:
    int age;
public:
    one()
    {
        age=1;
    }
    void setData(int num)
    {
        age=num;
    }
friend int returnOne(one a);
};
int returnOne(one a)
{
    return a.age;
}


class two
{
private:
    int roll;
public:
    two()
    {
        roll=0;
    }
    void setData(int num)
    {
        roll=num;
    }
friend int returnTwo(two b);
};

int returnTwo(two b)
{
    return b.roll;
}


int main()
{
    one a;
    two b;
    a.setData(10);
    b.setData(12);
    cout<<returnOne(a)<<endl<<returnTwo(b)<<endl;
} 

今、誰もがグローバルに定義されたフレンド関数を使用して classおよび classのプライベート メンバーにアクセスできるようになったため、 classoneおよびclass のセキュリティが侵害されているのではないかと心配しています。これらのフレンド機能を保護したり、使用を制限したりするにはどうすればよいですか?twoonetwo

4

2 に答える 2

2

friend船は相互です。クラス定義で関数をフレンドとして宣言しない限り、関数をフレンドにすることはできないため、それは選択です。あなたがそれを作るなら、あなたはそれと一緒に生きなければなりません。関数をフレンドにして、それがクラス内部にアクセスできないようにするのは意味がありません。それがまさに keyword の目的だからですfriend

友情を悪用したり誤解したりしないでください。友情は、2 つのエンティティ間の意図的な強い結合を示すために使用されます。2 つのエンティティ間に特別な関係が存在し、一方が他方のプライベートまたは保護されたメンバーにアクセスする必要があるが、パブリック アクセス指定子を使用して全員にアクセスさせたくない場合は、フレンドシップを使用する必要があります。

于 2013-08-28T08:22:52.137 に答える