OO正确性 - 继承层次结构 - 谁创建其他对象使用的对象?

时间:2014-12-24 15:04:41

标签: c++ oop

我是根据一些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设计。

由于我们的公司在圣诞节和新年之间基本上都被关闭了,所以我会打开和关闭这个帖子。

2 个答案:

答案 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

为什么你可能想要指针,将它们分配到其他地方,并将它们传递给构造函数,有很多原因,但除非有充分理由不这样做,否则只做最简单的事情。