私には、設計上の疑問があります。私は、クラスを持つ2つのメンバクラスを持つクラスSを、言う、PとCクラスPはクラスCからのメンバ関数を呼び出す必要があるとクラスPは今C.symetricalデザインパターンがあるので、メンバークラスは相互にポインターを持つことができますか?
からメンバ関数を呼び出すために私が対処方法を必要としますこれは最初にCを作成してPに渡し、次にPの静的にして、そのメンバー関数にCからアクセスできるようにしています(後で私はCクラスの配列を持つ可能性がありますが、 1つのP - 私は静的にすることができます)
私の質問は、これを設定する良い方法はありますか?理想的には、私はCとPにお互いのポインタを持たせたいのですが、どのようにしたらいいですか?
一部の簡易コードが添付されています。
ありがとうございます!あなたのヘッダファイルで
#include <iostream>
class C;
class P {
C *c;
P (C *x): c(x) {};
public:
static P *p;
static P *get_P(C *x) { if (!p) { p= new P(x);}; return p;};
static P *get_P() { return p;}
void P_function();
void P_other();
};
class C {
public:
C() {};
void C_function()
{
std::cout << "in C_funtion\n";
}
void C_other()
{
P::get_P()->P_function();
}
};
void P::P_other()
{
c->C_function();
}
void P::P_function()
{
std::cout << "in P_funtion\n";
}
class S {
public:
C c;
S()
{
P::get_P(&c);
};
};
P* P::p = NULL;
int main()
{
S s;
s.c.C_other();
P::get_P()->P_other();
}
この循環依存性が本当に必要かどうかを尋ねてください。彼らがいる状況があるかもしれませんが、私の意見ではまれです。 – Nobody