如何在c++中创建一个可以容纳派生对象的动态分配数组

How to make a dynamically allocated array that can hold derived objects in c++

本文关键字:派生 对象 数组 动态分配 一个 c++ 创建      更新时间:2023-10-16

你好,我正在为学校做一个项目,该项目必须使用动态分配的对象数组。我想知道我在这件事上哪里出错了。

Mammal* Pets = new Mammal[arraysize]; Pets[count] = new Dog(tempweight, tempname)

有一个错误,表示没有运算符与第二行代码的这些操作数匹配。

如果有帮助的话,这是我的构造函数,还有Dog构造函数。

Mammal::Mammal(void)
{
weight = 0;
name = "";
cout << "Invoking Mammal Default Constructorn";
}
Mammal::Mammal(int tempweight, string tempname)
{
weight = tempweight;
name = tempname;
cout << "Invoking Mammal Constructorn";
}
Dog::Dog(int tempweight, string tempname)
{
Setweight(tempweight);
Setname(tempname);
cout << "Invoking Dog Constructorn";
}

谢谢你,

您需要声明一个指针数组,如下所示:

Mammal ** Pets = new Mammal*[arraysize];

您正试图将Dog*设置为Mammal对象。您有一个指向Mammal对象的指针。在这种情况下,您实际上需要一个指向Mammal对象的指针数组。

但不要那样做。使用哺乳动物*的std::载体至少:

std::vector<Mammal*> pets;

或者,如果你知道尺寸,不需要更改:

std::array<Mammal*, 10> pets;

更好的是:

std::vector<std::unique_ptr<Mammal>> pets;