类和2D动态数组

时间:2015-12-12 13:40:28

标签: c++ arrays class

我很难让2D类数组充满其他类对象。

基类:

class Base {
protected:
    int x, y;
    int moves;
    char name;
    bool occupied;
public:
    Base();
    friend ostream& operator<<(ostream& os, const Base& test);
};

派生类:

class Derived : public Base {
private:
    const int x = 10;
    const int y = 60;
    Base **array;
public:
    Derived();
    void printBoard();
};

派生类的构造函数:

创建2d动态数组

Derived::Derived() {
    array = new Base*[x];
    for (int i = 0; i < x; i++) 
         array[i] = new Base[y];
}

派生类2:

class Derived2: public Base{
public:
    Derived2(int x, int y);
};

如何让2D数组接受并在之后正确显示该数组中的对象?

每当我尝试

Derived[x][y] = new Derived2(x,y);

它似乎无法发挥作用,我真的认为我已经坚持了一段时间:(

1 个答案:

答案 0 :(得分:0)

我无法获得DerivedBase之间的关系:

  1. Derived Base
  2. Derived 数组为Base s
  3. 您不能Derived[x][y],这需要Derived拥有一个用户定义的operator[],它将返回另一个数组(如果可以使其成为static)。如果您想访问array,则需要一个Derived的实例,并提供一个&#34; getter&#34; array的函数。

    你需要有一个2D数组指针来做多态:Base ***array;,像下面一样分配:

    array = new Base**[x];
    for (int i = 0; i < x; i++) 
         array[i] = new Base*[y];
    // this gives you 2D array of uninitialized pointers
    

    您忘记在Base的析构函数中删除此数组。 This is how you do it。资源管理应该是您实施的第一件事,并确保它是正确的。之后就是逻辑。

    这是&#34; getter&#34;函数(public):

    Base ***Derived::getArray() const
    {
        return array; // array is private, you access it with this function
    }
    

    你在代码中使用它:

    int x = 1, y = 2;
    Derived d; // create an instance - this calls Derived's constructor, allocates array
    
    d.getArray()[x][y] = new Derived2(x, y);
    

    我建议使用std::vector(或std::array,因为你有不变的维度)而不是动态分配的数组。