我有一个包含纯虚函数的类。我使用这个类来确保我不会忘记在派生类中实现一些方法。
我有一个派生类的集合,比如
class B : public A
class C : public A
class D : public A
etc如何创建一个可以容纳所有这些派生类(B、C、D)的容器?我更喜欢使用标准容器,比如vector。我尝试创建基类的向量,但如果将派生类推送到向量上,则会导致派生类被转换,从而导致抽象类类型的无效new-expression编译错误。
我的基类:
class A
{
public:
A();
virtual ~A();
virtual double GetVolume() = 0;
};示例派生类:
class B : public A
{
public:
B(){};
virtual ~B(){};
double GetVolume(){};
};发布于 2016-09-27 02:15:47
您需要创建一个指向base的指针容器。基对象的容器导致从派生对象到基对象的转换,这称为切片。然而,当您有一个指向基类的指针时,对象仍然可以具有与基类不同的类型(派生类型),这称为对象的动态类型(与静态类型相对)。
在现代C++中,最好使用智能指针来实现这一点:
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();
}https://stackoverflow.com/questions/39709384
复制相似问题