让一个类的实例搜索另一个类中的数组



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

我有一个班级,看起来像这样:

{
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中的二维数组中进行搜索,并在找到非空指针的点时立即停止。

如何让僵尸在阵列中搜索?

附言:我知道CZombie很抽象,但它的孩子们必须能够找到里面的植物。

要回答您的即时问题,需要为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]*是指向每个维度为7CZombie*的2D阵列的指针(根据CGarden类(。请注意,该指针实际上并不拥有数组的内存,因此如果CGarden超出范围,那么访问该指针将是未定义的行为。


也就是说

IMO一个更好的方法是重构代码,使CGarden定义Find逻辑,从而使CZombieCGarden不具有强耦合。

从拓扑上讲,如果内部对象需要搜索外部对象的容器,即使该容器是共享的,设计也会更加复杂。如果你可以重构,这样就不会出现这种情况,这将更干净、更容易使用。

最新更新