首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个容器来存储多种类型

创建一个容器来存储多种类型
EN

Stack Overflow用户
提问于 2016-09-27 01:58:14
回答 1查看 472关注 0票数 2

我有一个包含纯虚函数的类。我使用这个类来确保我不会忘记在派生类中实现一些方法。

我有一个派生类的集合,比如

代码语言:javascript
复制
class B : public A
class C : public A
class D : public A 
etc

如何创建一个可以容纳所有这些派生类(B、C、D)的容器?我更喜欢使用标准容器,比如vector。我尝试创建基类的向量,但如果将派生类推送到向量上,则会导致派生类被转换,从而导致抽象类类型的无效new-expression编译错误。

我的基类:

代码语言:javascript
复制
class A
{
public:
    A();
    virtual ~A();

    virtual double GetVolume() = 0;
};

示例派生类:

代码语言:javascript
复制
class B : public A
{
public:
    B(){};
    virtual ~B(){};

    double GetVolume(){};
};
EN

回答 1

Stack Overflow用户

发布于 2016-09-27 02:15:47

您需要创建一个指向base的指针容器。基对象的容器导致从派生对象到基对象的转换,这称为切片。然而,当您有一个指向基类的指针时,对象仍然可以具有与基类不同的类型(派生类型),这称为对象的动态类型(与静态类型相对)。

在现代C++中,最好使用智能指针来实现这一点:

代码语言:javascript
复制
std::vector<std::unique_ptr<A>> x;
x.push_back(std::make_unique<B>());
x.push_back(std::make_unique<C>());
x.push_back(std::make_unique<D>());

for (auto& e : x) {
    e->GetVolume();
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39709384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档