繁体   English   中英

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

[英]How to create an array in which the type is abstract but the objects will be derived classes (C++)

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM