0

问题是关于 C++ 的。我有 3 个类:第一个,命名MovieMaker,是抽象的,第二个,命名Actor,是从第一个派生的,第三个,命名为 'Director' 派生自Actor. 我想创建一个可以同时保存 Actor 和 Director 实例的数组。我怎样才能做到这一点?

4

2 回答 2

3

std::shared_ptr<MovieMaker>创建一个, 或的数组unique_ptrstd::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>(),
};

如果您愿意使用boost3rd 方库,还有其他一些选择。

或者,创建一个 的数组boost::variant<Actor,Director>,它忽略类层次结构并简单地存储一个类型安全的union类似构造。 boost::variant使用起来有点技巧。

作为另一种选择,boost::any可以存储任何东西,如果它有什么是你想要的,你可以查询它。

于 2013-03-13T13:16:09.493 回答
3

创建一个指针数组MovieMaker。它可以保存指向派生类的指针。这种技术称为多态性 - 这是一个很好的教程:

http://www.cplusplus.com/doc/tutorial/polymorphism/

于 2013-03-13T13:12:09.913 回答