我是根据一些OO图实现某些东西,但继承很深,我对谁需要实例化用于创建其他对象的对象感到有点困惑。该图如下所示:
IFCa是IFCCBase
IFCCBase是国际金融公司
国际金融公司是一个IFO
IFP是一个IFO
IFCC是IFCCBase
IFCC 有一个 IFP
IFCa是国际金融公司
IFCCBase 有一个 M,以及IFC的共享指针向量
IFCC,IFCCBase和IFC的代码还没有做多少。这是我的代码的一个例子:
IFP.h:
#include "IFO.h"
#include "IFCCBase.h"
#include "IFCC.h"
#include "IFC.h"
class IFP: public IFO{
public:
IFP(IFO* pParent, param, param, param, param);
private:
IFC *m_C;
IFCCBase *m_IFCCBase;
IFCC *m_IFCC;
};
IFP.cpp:
#include "IFP.h"
IFP::IFP(IFO* pParent, param, param, parm, param): IFO(pParent)
{
m_C = new IFC(pParent);
m_IFCCBase = new IFCCBase(m_C);
m_IFCC = new IFCC(m_IFCCBase);
}
所以这是我的问题。要创建IFCC,我需要实例化从之前创建的两个对象。这属于IFP的构造函数,还是应该从其他地方的IFP参数列表中提供?这很难,因为我不熟悉这个领域,而且已经有一段时间了,因为我不得不考虑像这样的OO设计。
由于我们的公司在圣诞节和新年之间基本上都被关闭了,所以我会打开和关闭这个帖子。
答案 0 :(得分:0)
我现在和团队谈过,每个人都回来度假了,事实证明,对于IFP而言,而不是
m_C = new IFC(pParent);
m_IFCCBase = new IFCCBase(m_C);
m_IFCC = new IFCC(m_IFCCBase);
需要
m_IFCC = new IFCC(this);
另外,IFCC层次结构中的其他类(IFC,IFCCBase)接收通用IFO而不是显式父类。
这样,IFP不了解其类成员的整个层次结构,并且传递了我们的域所需的信息。另外,编译器不认为它是循环的。这是一个非常不同的设置,我想这不是人们可以轻易回答的,正确的,在这里,我还没有意识到这一点。谢谢!
答案 1 :(得分:-1)
基于您所描述的关系的直接实施,您将拥有:
struct M {
};
struct IFO {
};
struct IFC : IFO {
};
struct IFP : IFO {
};
struct IFCCBase : IFC {
M m;
std::vector<std::shared_ptr<IFC> > ifc_ptrs;
};
struct IFCa : IFCCBase {
};
struct IFCC : IFCCBase {
IFP ifp;
};
不一定需要指针或new
。
为什么你可能想要指针,将它们分配到其他地方,并将它们传递给构造函数,有很多原因,但除非有充分理由不这样做,否则只做最简单的事情。