2

私は C++ の初心者です。フレンド関数の使用を実装する簡単なプログラムを作成しました。コードは次のとおりです。

#include<iostream>

using namespace std;

class one
{
   private:
       int age;
   public:
       one()
       {
           age=1;
       }

       void setData(int num)
       {
           age=num;
       }

   friend int returnOne()
   {
       return age;
   }
};

class two
{
   private:
       int roll;
   public:
       two()
       {
          roll=0;
       }

       void setData(int num)
       {
          roll=num;
       }

   friend int returnTwo()
   {
       return roll;
   }
};

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

C++ で次のエラーが発生します。

friend.cpp: In function ‘int returnOne()’:
friend.cpp:8:6: error: invalid use of non-static data member ‘one::age’
friend.cpp:20:9: error: from this location
friend.cpp: In function ‘int returnTwo()’:
friend.cpp:27:6: error: invalid use of non-static data member ‘two::roll’
friend.cpp:39:9: error: from this location
friend.cpp: In function ‘int main()’:
friend.cpp:47:10: error: ‘class one’ has no member named ‘returnOne’
friend.cpp:47:31: error: ‘class two’ has no member named ‘returnTwo’

EDIT Thanks.It は問題を解決しました。

privateしかし、それは私を別の質問に導きます。現在、どのクラスまたは関数も単にフレンド関数を使用してプライベートデータメンバーにアクセスできるため、フレンドキーワードは使用の目的を危うくしているのではないでしょうか。データ メンバーのpublic代わりにprivate.Whats を使用する際の特別な点はprivate何ですか?

4

1 に答える 1

4

このリンクを見てください

フレンド関数は、クラスのメンバーではありませんが、クラスのプライベートおよび保護されたメンバーにアクセスできる関数です。フレンド関数はクラス メンバーとは見なされません。これらは、特別なアクセス権限が与えられた通常の外部関数です。フレンドはクラスのスコープ内になく、別のクラスのメンバーでない限り、メンバー選択演算子 (. および –>) を使用して呼び出されることはありません。フレンド関数は、アクセスを許可するクラスによって宣言されます。フレンド宣言は、クラス宣言のどこにでも配置できます。アクセス制御キーワードの影響を受けません。

于 2013-08-28T07:51:55.080 に答える