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

时间:2014-04-24 01:26:02

标签: c++ arrays

您好我正在为学校做一个必须使用动态分配的对象数组的项目。我想知道我在这个问题上出了什么问题。

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

有一个错误表明没有操作符匹配第二行代码的这些操作数。

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

Mammal::Mammal(void)
{
weight = 0;
name = "";
cout << "Invoking Mammal Default Constructor\n";
}

Mammal::Mammal(int tempweight, string tempname)
{
weight = tempweight;
name = tempname;
cout << "Invoking Mammal Constructor\n";
}

Dog::Dog(int tempweight, string tempname)
{
Setweight(tempweight);
Setname(tempname);
cout << "Invoking Dog Constructor\n";
}

谢谢,

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

但不要这样做。至少使用哺乳动物*的std :: vector:

std::vector<Mammal*> pets;

或者如果你知道尺寸而不需要改变它:

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

更好的是:

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