问题是关于 C++ 的。我有 3 个类:第一个,命名MovieMaker
,是抽象的,第二个,命名Actor
,是从第一个派生的,第三个,命名为 'Director' 派生自Actor
. 我想创建一个可以同时保存 Actor 和 Director 实例的数组。我怎样才能做到这一点?
问问题
146 次
2 回答
3
std::shared_ptr<MovieMaker>
创建一个, 或的数组unique_ptr
。std::vector
在 C++ 中,创建 a而不是原始数组通常是一个好主意: so std::vector<std::shared_ptr<MovieMaker>> vec
,您可以像这样填充它:
#include <vector>
#include <memory>
// later:
std::vector<std::shared_ptr<MovieMaker>> vec;
vec.push_back( std::make_shared<Actor>() );
vec.push_back( std::make_shared<Director>() );
vec.push_back( std::make_shared<Actor>() );
或者,在 C++11 中:
#include <vector>
#include <memory>
// later:
std::vector<std::shared_ptr<MovieMaker>> vec = {
std::make_shared<Actor>(),
std::make_shared<Director>(),
std::make_shared<Actor>(),
};
如果您愿意使用boost
3rd 方库,还有其他一些选择。
或者,创建一个 的数组boost::variant<Actor,Director>
,它忽略类层次结构并简单地存储一个类型安全的union
类似构造。 boost::variant
使用起来有点技巧。
作为另一种选择,boost::any
可以存储任何东西,如果它有什么是你想要的,你可以查询它。
于 2013-03-13T13:16:09.493 回答
3
创建一个指针数组MovieMaker
。它可以保存指向派生类的指针。这种技术称为多态性 - 这是一个很好的教程:
于 2013-03-13T13:12:09.913 回答