2

我的问题是我需要能够创建一个包含 100 个对象的数组。然而,这些对象可能是四种不同的对象之一,所有这些对象最终都派生自一个抽象类。我可以使用 4 个单独的数组,但似乎我的老师只希望我们使用一个数组。

类结构是:DVD & VHS 来源于 Video,CD & Cassette 来源于 Audio,Audio & Video 来源于 Media。音频、视频和媒体都是抽象的。

4

2 回答 2

2

你必须使用指针。您不能复制或分配派生类型,至少不能通过基类型的声明。

于 2012-12-02T22:23:09.513 回答
0

对于数组 - 类型的大小必须已知(用于保留连续内存) - 类型可能不是抽象类(用于初始化类必须是可实例化的)

数组的唯一解决方案是使用指针间接寻址,因为指针的大小是已知的。您可以使用原始或智能指针指向基类。使用原始指针时,您必须在删除数组之前处理对象破坏。当您的数组本身驻留在堆上时,请不要忘记delete []

为了克服这些问题,应该使用带有智能指针的标准容器(如矢量)。只有这样,容器的简单删除才会删除所有媒体对象。如果容器应驻留在堆上,您还应该使用智能指针来保存它。

让自己熟悉这两个概念。如果你不知道什么类型最好使用 vector 和 shared_ptr 直到你知道得更好。

忘了说:你在标准库中找到的vector,你只能在C++11编译器中找到shared_ptr。如果您有较旧的编译器,则必须包含boost 库

于 2012-12-02T23:05:49.237 回答