C++算法的结构和类
C++ algorithm structure and classes
我需要开发一个快速算法,问题的自然结构将是
class A {B b; C c;};
class B {};
class C {};
B类和C类的一些方法使用A类的字段。但我想,由于范围的原因,这是不可能的。我该如何更好地构建它?也许在B和C中包含一个a类指针?
在B和C中不包括指向a的指针,而是在需要a元素的方法的参数列表中包括指针(不过不是很好的解决方案)。
但是,如果B和C的实例是A实例状态的部分,并且需要A实例的其他部分,那么您应该考虑将方法从B和C移动到A。原因:如果该方法在B、C和A的其他部分上操作,那么很可能是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
负责吗?或者甚至(喘息)自由功能?
您可能需要使用接口,即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,从而避免头文件中的循环依赖。
相关文章:
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 学习数据结构和算法的简单方法
- 对于这个问题,是否有更好的数据结构和算法选择
- 通过指针算法访问结构数据成员
- 通过指针算法调用结构的结构属性
- 是什么让这种易失性打破了结构的指针算法?
- 使用指针算法调用结构内的结构数组
- 在现有数据结构上使用BGL算法需要什么(边和顶点作为矢量<对象*>)?
- 我正在尝试为 Kruskal 算法实现一个C++程序,该程序需要我按权重对图形进行排序。如何按权重对结构进行排序
- 状态结构在线段相交平面扫描算法中的应用
- 最短路径的dijkstra算法的时间复杂度是否取决于所使用的数据结构?
- 哪种数据结构和算法适用于此
- 用于创建、可视化和算法操作数据结构的C++库
- 用C++算法将.csv文件转换为结构
- C++ 数据结构的排序算法
- 使用 STL:算法对结构进行排序
- 对一组数字进行排序的最快数据结构(和排序算法)是什么
- 压缩2D曲线的最佳数据结构/算法是什么?
- 数据结构/算法,可以跟踪结构(x和y)和值,避免重复
- 数据结构+算法为ipv4存储高效搜索前缀