他の 2 つのクラスのオブジェクトを含むクラスがあります。他のクラスからデータを取得できるようにするには、クラスの 1 つが必要です。例を次に示します。
class Nom{ /*says what we're eating*/ };
class Chew{ /*stuff that needs to know about what we are eating from nom*/ };
class BigBurrito
{
Nom n;
Chew c;
};
他の 2 つのクラスのオブジェクトを含むクラスがあります。他のクラスからデータを取得できるようにするには、クラスの 1 つが必要です。例を次に示します。
class Nom{ /*says what we're eating*/ };
class Chew{ /*stuff that needs to know about what we are eating from nom*/ };
class BigBurrito
{
Nom n;
Chew c;
};
Nom
intoのインスタンスへのポインタを渡すのはどうChew
ですか? これらの行に沿って:
class Nom {};
class Chew
{
private:
Nom *m_nom;
public:
Chew(Nom *nom)
: m_nom(nom)
{}
};
class BigBurrito
{
private:
Nom m_nom;
Chew m_chew;
public:
BigBurrito()
: m_chew(&m_nom)
{}
};
他のクラスへのポインターをクラスのメンバーにすることができます
class Nom{
Chew* chew;
};
class Chew{ /*stuff that needs to know about what we are eating from nom*/ };
class BigBurrito
{
Nom n; //contains pointer to c
Chew c;
};
または、操作を実行する関数にパラメーターを介して渡します。
class Nom
{
void performOperationOnChew(Chew& c);
};
class Chew{ /*stuff that needs to know about what we are eating from nom*/ };
class BigBurrito
{
Nom n;
Chew c;
void doTheOperation()
{
n.performOperationOnChew(c);
}
};
2 番目のオプションは、Chew
論理的に に属していないため、よりクリーンな OOPNom
です。
n
( Nom
) への参照をChew
コンストラクターに渡すだけです。