C++ のフレンド関数について質問があります。関数がクラスのフレンド関数として定義されている場合、プライベート、プロテクト、パブリックのいずれであっても、任意のメンバー変数または関数にアクセスできることを理解しています。最近、doxygen を使用してドキュメント参照を作成していますが、フレンド関数の別の利点を見つけました。フレンド関数は、HTML ページのメンバー関数の後にリストされるため、クラスとの関係を簡単に示すことができます。ただし、関数がフレンドとして定義されていない場合、グローバル関数と見なされ、doxygen ではクラスのドキュメントに記載されません。次に、特定のクラスと関係を持つすべてのグローバル関数をそのフレンド関数として作成する予定です。これは良い習慣なのかどうか疑問に思っていました。
次のコードは、1 つの関数をフレンド関数またはグローバル関数として選択できることを示しています。
#include <iostream>
#include <map>
#include <set>
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
#include <numeric>
#include <string>
using namespace std;
class ABCD
{
public:
int a;
int b;
friend void friend_fun(const ABCD &obj);
};
void fun(const ABCD &obj)
{
std::cout<<obj.a<<endl;
std::cout<<obj.b<<endl;
};
void friend_fun(const ABCD &obj)
{
std::cout<<obj.a<<endl;
std::cout<<obj.b<<endl;
};
int main ()
{
ABCD obj;
obj.a = 20;
obj.b = 30;
fun(obj);
friend_fun(obj);
return 0;
}