これは C++ の仕組みに関する質問です。
私は修飾子を調べていて、ここでメソッドfriend
の例を見つけました。static friend
しかし今、私はそれを機能させるために特定のことが行われた理由を理解するのに苦労しています.
また、これがどのような実用的なアプリケーションに使用できるかにも興味がありますか? いつ使用しますかstatic friend
? これは避けるべきですか?
これは、私が混乱している部分を指摘するためにコメントが追加されたコードです。
#include <iostream>
class A; //1. why declare class A here and define it below?
class B
{
public:
B();
~B();
static void SetAiPrivate(int value); //Makes SetAiPrivate static
static A *pa; //static instance of class A for class B's static
//methods to use
};
class A
{
friend void B::SetAiPrivate(int); //Gives Class B's SetAiPrivate method access
//to A's private variables
public:
A(){iPrivate = 0;}
~A(){}
void PrintData(){ std::cout << "iPrivate = "<< iPrivate<<"\n";}
private:
int iPrivate;
};
A *B::pa;//2. Why is this needed?
// If commented out it causes an external linking error.
B::B()
{
pa = new A;
}
B::~B()
{
delete pa;
}
void B::SetAiPrivate(int value)
{
pa->iPrivate = value;
}
int main()
{
B b; //3. Is this necessary? Doesn't C++ automatically initiate static
// member variables when a class is referenced
B::SetAiPrivate(7);
B::pa->PrintData();
return 0;
}