我很难让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);
它似乎无法发挥作用,我真的认为我已经坚持了一段时间:(
答案 0 :(得分:0)
我无法获得Derived
和Base
之间的关系:
Derived
是 Base
Derived
的数组为Base
s 您不能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
,因为你有不变的维度)而不是动态分配的数组。