我需要开发一种快速算法,问题的自然结构是C++算法结构和类
class A {B b; C c;};
class B {};
class C {};
与B类和C采用A级领域的一些方法,但我想,由于范围原因,这是不可能的。 我怎样才能更好地构造这个?也许在B和C中包含一个类A指针?
我需要开发一种快速算法,问题的自然结构是C++算法结构和类
class A {B b; C c;};
class B {};
class C {};
与B类和C采用A级领域的一些方法,但我想,由于范围原因,这是不可能的。 我怎样才能更好地构造这个?也许在B和C中包含一个类A指针?
一个天真的(简单的)解决方案是简单的引用传递给A
来构造两个B
和C
:
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
的真正目的是什么?仅仅是成为B
和C
的持有者吗?它有工作吗?它试图做太多吗?
或者,也许问题是在相反的方向。也许是为了将每一件东西都挤在一个对象形状的盒子里,你已经创建了一台比它需要更复杂的机器。应该B
的和C
的任务真的是A
的责任?或者甚至是(无喘气)的免费功能?
某些A类方法要求存储在类B和C中的值以及其他未存储在此处的值。这就是为什么我想将其他值存储在另一个类(A)中的原因。由于我的代码中有很多模板,因此我想避免根据大量模板定义函数,并认为这是最简单的方法......感谢您的回答 – user1403546 2014-10-08 13:04:57
也许这些值应该放在另一个“ class'(或'struct'),'D',其中'A','B'和'C'分别获得/引用的副本? – 2014-10-08 13:36:36
在B和C中不包括指向A的指针,但在需要A元素的方法的参数列表中包含指针(虽然不是很好的解决方案)。
但是,如果B和C的实例是 A的实例的状态组成部分,也是需要 A的实例的其他地方,那么你应该考虑移动从B和C的方法添加到原因:如果方法对b,c和其他部分进行操作,那么很可能它是a的行为。
您可能需要使用接口,即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中包含a.h,从而避免了头文件中的循环依赖。
如果将类A置于B和C之下,那么您将拥有的工作良好,因此编译器在看到它们在A中使用时具有B和C的定义。 – 2014-10-08 12:10:16
应在'A之前定义'B'和'C' ',那么你可以在两个定义之后定义你的方法。您可能需要做一些前瞻性声明。 – Jarod42 2014-10-08 12:11:01
如果你在C++中键入'class',而不是'Class' ... – quantdev 2014-10-08 12:11:08