制作一个地图,其中值类型是C ++中的抽象类

Ale*_*991 3 c++ abstract-class map

我有一个抽象类element和一个子类elasticFrame

class element
{
public:
    virtual Matrix getStiffness() = 0;
protected:
    Matrix K;
};


class elasticFrame3d:public element
{
public:
    elasticFrame3d(double E, double G);
    virtual Matrix getStiffness();
virtual Matrix getTransform();
private:
    double E, G;
};
Run Code Online (Sandbox Code Playgroud)

我想要做的是这样的地图:

map<int, element> elementMap;
Run Code Online (Sandbox Code Playgroud)

但是当我收到此错误时:

error C2259: 'element' : cannot instantiate abstract class
Run Code Online (Sandbox Code Playgroud)

甚至有可能做到这一点?如果是,怎么办?

Die*_*ühl 6

您将无法创建element具有抽象功能的type值。如果要存储从派生的类型的对象,则element需要存储合适的指针或对这些对象的引用。例如,您可以使用std::unique_ptr<element>std::shared_ptr<element>(需要包括#include <memory>),然后在合适的存储区域中分配具体对象。

也就是说,您将使用以下内容:

std::map<int, std::unique_ptr<element>> elementMap;
elementMap[17] = std::unique_ptr<element>(new elasticFrame3D(3.14, 2.71));
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您使用的是一个不常用的命名约定:使用CamelCase时,类型通常用大写字母书写,而对象则使用小写首字母书写。