Base クラス、Parent クラス、Child クラスの 3 つのクラスがあります。親にはm_children
複数の子を持つことができるベクトルがありますが、子はその属性として 1 つの親オブジェクトしか持つことができませんm_parent
。これをどのように実装すればよいですか?これがクラスの簡単なプレビューです(質問のために書き直しました)
Base.h
class Base
{
public:
Base();
virtual void getClid();
virtual void setClid();
private:
int m_clid;
};
Parent.h
#include <vector>
#include "Base.h"
#include "Child.h"
class Parent : public Base
{
public:
Parent();
void addChild(Child* child);
void removeChild(Child* child);
Child* getChild(int index);
private:
std::vector<Child*> m_children;
};
Child.h
#include "Base.h"
class Child : public Base
{
public:
Child();
Base* getParent();
void setParent(Base* parent);
private:
Base* m_parent;
};
ご覧のとおり、ここでの問題は、"Parent.h" を "Child.h" に含めるか、またはその逆にのみ含めることができ、両方を含めることができないことです。子に親のタイプを伝えるにはどうすればよいですか? 以下のコードは正常に動作しますが、たとえば Child オブジェクトのデストラクタから呼び出したい場合m_parent->removeChild(this);
、子は親の getClid および setClid メソッドしか認識しないため、動作しません。これらは両方とも「Base.h」で定義されています。