提问者:小点点

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


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

我有一个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很抽象,但是它的孩子类必须能找到里面的植物。


共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不具有强耦合。

从拓扑上看,如果内部对象需要搜索外部对象的容器,即使该容器是共享的,那么设计就会更加复杂。 如果您可以重构,使情况并非如此,这将更干净,更容易处理。