C ++算法结构和类

时间:2014-10-08 12:08:40

标签: c++ algorithm

我需要开发一种快速算法,问题的自然结构将是

class A {B b; C c;};
class B {};
class C {};

使用A类字段的B类和C类的一些方法。但我认为,由于范围原因,这是不可能的。 我怎样才能更好地构建它?也许在B和C中包含一个A类指针?

3 个答案:

答案 0 :(得分:3)

不包括指向B和C内部的A的指针,但是在需要A元素的方法的参数列表中包含指针(尽管不是那么好的解决方案)。

但是如果B和C的实例是的一部分 A的实例的状态,并且需要 A的实例的其他部分,那么你应该考虑一下将方法从B和C移动到A.原因:如果方法在b,c和a的其他部分上运行,则可能是a的行为。

答案 1 :(得分:1)

一个天真(直接)的解决方案是简单地将A的引用传递给BC的构造函数:

class B
{
public:
  B (const A& a) : mA (a) {}
private:
  const A& mA; 
};

或者更好的是,将引用传递给您实际需要的字段:

class B
{ 
public:
  B (const int& foo, const std::string& bar) : mFoo (foo), mBar (bar) {};
private:
  const int& mFoo;
  const std::string mBar;
};

但事实上,手头的问题让我想到了这种愚蠢的直接解决方案,这就是代码味道。我怀疑整个设计都被打破了。

我想知道A的真正目的是什么?只是成为BC的持有者?它有工作吗?它试图做太多吗?

或者问题可能是相反的方向。也许是为了试图将每一件东西都挤进一个物体形状的盒子里,你创造了一台比它需要的更复杂的机器。 BC的任务真的应该由A负责吗?或者甚至(喘息)自由功能?

答案 2 :(得分:0)

您可能需要使用接口,即B和C的抽象基类,我们称之为IB和IC(接口为B和C)。

a.h包括ib.h和ic.h。

B和C提供的服务仅通过接口基类使用。

b.h和c.h包括a.h. (当然还有ib.h和ic.h)。

但是如果只有B和C的实现需要A,那么你可以在没有接口基类的情况下进行管理 - 只在b.cpp和c.cpp中包含ah,从而避免了头文件中的循环依赖。