抽象类的2D数组

2D array of an abstract class?

本文关键字:数组 2D 抽象类      更新时间:2023-10-16

我在处理抽象数组时遇到了困难。在我目前的情况下,我想要一个名为Base的抽象类的2D数组。因此,我在一个名为Container的类中创建了一个指向Base的2D数组的指针。如何访问数组中的项?另外,有人能确认我正在正确删除我的数组吗?提前感谢您的帮助!

class Base
{
public:
    virtual void abstract() = 0;
};
//----------------------------------
class Derived : public Base
{
public:
    virtual void abstract();
};
void Derived::abstract()
{
    // empty
}
//----------------------------------
class Container
{
public: 
    Board();
    virtual ~Board();
    Base* bases[8][8];
};
// Constructor
Container::Container()
{
    for (int i = 0; i < 8; i++)
        for (int j = 0; j < 8; j++)
            bases[i][j] = new Derived();
}
// Destructor
Container::~Container()
{
    for (int i = 0; i < 8; i++)
        delete [] bases[i];
    delete [] bases;
}
//----------------------------------
int main()
{
    Container container;
}

这里没有delete[]的数组。你没有new[]任何数组,为什么要delete[]它们?

您确实需要删除每个单独的元素,这与数组中的delete[]不同:

for (int i = 0; i < 8; i++)
    for (int j = 0; j < 8; j++)
        delete bases[i][j];

确保你的Base有一个虚拟的析构函数!


bases[8][8] = new Derived();

哎呀。数组索引最多只能达到7!我怀疑你打算写bases[i][j] = new Derived()