我是新来的,真的不知道把这个放在哪里,但我有以下问题:
我有一个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很抽象,但是它的孩子类必须能找到里面的植物。
要回答您眼前的问题,需要为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
逻辑,从而使Czombie
与Cgarden
不具有强耦合。
从拓扑上看,如果内部对象需要搜索外部对象的容器,即使该容器是共享的,那么设计就会更加复杂。 如果您可以重构,使情况并非如此,这将更干净,更容易处理。