【问题标题】:Letting an instance of a class search through an array within another class让一个类的实例搜索另一个类中的数组
【发布时间】:2020-12-02 08:49:15
【问题描述】:

我是新来的,真的不知道该放在哪里,但我有以下问题:

我有一个 CZombie 类,如下所示:

{
private:
    int m_Lifepoints;
    int m_PositionX;
    int m_PositionY;
    short m_SunSensetivity;

public:
    CZombie(int Lifepoints, int PositionX, int PositionY, short Sun);
    ~CZombie();
    void SetLifepoints(int Lifepoints);
    int GetLifepoints();
    void SetPositionX(int PosiX);
    int GetPositionX();
    void SetPositionY(int PosiY);
    int GetPositionY();
    short GetSunSensetivity();
    bool virtual FireWeapon(int x, int y) = 0;
    void virtual RevealRole();
    void Find();
};

还有一个 CGarden 类,如下所示:


#include "CZombie.h"

class CGarden
{
private:
    CZombie* m_Array[7][7];

public:
    CGarden();
    ~CGarden();
    CZombie* ReturnValue(int x, int y);
    void SetField(int x, int y, CZombie* thing);
};

在CZombie中,有一个叫Find的成员函数,它应该在CGarden类的二维数组中进行搜索,一旦找到非空指针的位置就停止。

如何让僵尸搜索数组?

PS:我知道 CZombie 是抽象的,但它的子类必须能够找到其中的植物。

【问题讨论】:

  • 你可能需要重新考虑你的设计,因为这有强烈的循环依赖的味道。你能重构你的代码,让Find 成为CGarden 的一部分吗?

标签: c++ arrays loops class


【解决方案1】:

要回答您的直接问题,CZombie 需要获得一个指向数组的指针或引用以进行搜索,以便Find 可以找到它。这可以作为原始指针/引用、shared_ptr 等来完成。例如:

class CZombie {
    ...
public:
    CZombie(CZombie(*zombie_array)[7][7]*, Lifepoints, int PositionX, int PositionY, short Sun);
    ...
}

CZombie(*zombie_array)[7][7]* 是指向CZombie* 的二维数组的指针,每个维度为7(根据CGarden 类)。请注意,此指针实际上并不拥有数组的内存,因此如果CGarden 超出范围,则访问此指针将是未定义的行为。


也就是说……

IMO 对此更好的方法是重构您的代码,以便 CGarden 定义 Find 逻辑,以便 CZombieCGarden 没有强耦合。

从拓扑上讲,如果内部对象需要搜索外部对象的容器,则设计会更加复杂,即使该容器是共享的。如果您可以重构以防止这种情况发生,那么这将更清洁且更易于使用。

【讨论】:

  • 我知道你要去哪里,遗憾的是我们的教授希望我们专门实现 CZombie 类中的 find 函数,谢谢你的解决方案,非常感谢。
  • 如果你的教授希望你这样做,他应该重新考虑他的优先事项。
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 2020-10-23
  • 1970-01-01
  • 2014-10-27
相关资源
最近更新 更多