我的问题是,我需要能够创建一个包含100个对象的数组。但是,这些对象可以是四个不同对象中的一个,所有这些对象最终都派生自一个抽象类。我可以使用4个独立的数组,但似乎我的老师只想让我们使用一个数组。
类结构是: DVD和VHS派生自视频,CD和卡带派生自音频,音频和视频派生自媒体。音频、视频和媒体都是抽象的。
发布于 2012-12-03 06:23:10
你必须使用指针。不能复制或分配派生类型,至少不能通过基类型的声明。
发布于 2012-12-03 07:05:49
对于数组-类型的大小必须是已知的(为了保留连续内存)-类型不能是抽象类(对于初始化类必须是可实例化的)
数组的唯一解决方案是使用指针间接,因为指针的大小是已知的。您可以使用原始指针或智能指针指向基类。当使用原始指针时,在删除数组之前必须注意对象的销毁。当数组本身驻留在堆中时,不要忘记delete []
。
为了克服这些问题,应该在smart pointer中使用一个标准的类似container的向量。只有这样,容器的简单删除才会删除所有媒体对象。如果容器应该驻留在堆上,那么您也应该使用智能指针来保存它。
让自己熟悉这两个概念。如果您不知道哪种类型是最好的,请使用vector和shared_ptr,直到您了解得更清楚为止。
忘了说: vector你可以在标准库中找到,shared_ptr你只能在C++11编译器中找到。如果您使用的是旧版编译器,则必须包含boost libraries。
https://stackoverflow.com/questions/13674552
复制相似问题