C++ 如何创建类型为抽象但对象为派生类的数组(C+;+;)

C++ 如何创建类型为抽象但对象为派生类的数组(C+;+;),c++,C++,我的问题是,我需要能够创建一个包含100个对象的数组。然而,这些对象可能是四个不同对象中的一个,所有这些对象最终都是从抽象类派生的。我可以使用4个单独的数组,但似乎我的老师只希望我们使用一个数组 课程结构是:DVD和VHS源于视频,CD和磁带源于音频,音频和视频源于媒体。音频、视频和媒体都是抽象的。您必须使用指针。您不能复制或分配派生类型,至少不能通过基类型声明进行复制或分配。对于数组 -类型的大小必须已知(用于保留连续内存) -类型不能是抽象类(用于初始化类必须是可实例化的) 数组的唯一解决方

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


课程结构是:DVD和VHS源于视频,CD和磁带源于音频,音频和视频源于媒体。音频、视频和媒体都是抽象的。

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

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

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

为了克服这些问题,应使用标准类向量和。然后,只需简单地删除容器即可删除所有媒体对象。如果容器应该位于堆上,那么也应该使用智能指针来保存它

让自己熟悉这两个概念。如果您不知道什么类型是最好的,请使用vector和shared_ptr,直到您更好地了解


忘了说:在标准库中找到的向量,在C++11编译器中找到的共享的ptr。如果你有一个旧的编译器,你必须包括。

你想要
std::vector
,可从
@KerrekSB获得。显然,你的评论是正确的答案,但根据经验,我担心这些概念不会在OP的课堂上使用-\你是对的,我不允许使用STL中的任何东西好吧,现在我的问题是VS2010说数组没有初始化<代码>媒体*数据库[100]是我试图实现的关于
媒体*数据库[100]={}?但这可能不是问题:您可能需要在使用之前填充数组,因此它没有初始化这一事实并不是问题。(但请考虑使用<代码> Boo::pTrvector Vector ,或者至少将数组封装在您自己提供的类似功能的类中)不能使用向量,我的教授只允许使用静态数组。