小编nur*_*gan的帖子

C++"使用抽象基类调用纯虚方法"

我使用的是一个只有纯虚方法的抽象基类,在C++中有一个接口行为(是的,我来自Java).就我的研究而言,这似乎是要走的路.

我必须抽象基类,GraphReader和Graph.

class Graph{
   public:
   Graph() {};
   virtual ~Graph() {};
   virtual void layout() = 0;
   virtual std::vector<std::shared_ptr<Node>> getNodes() = 0;
   virtual std::vector<std::shared_ptr<Edge>> getEdges() = 0;

   protected:

};

class GraphReader{
   public:
   GraphReader(std::string fileName_) :
         fileName(fileName_) {};
   virtual ~GraphReader() {};
   virtual Graph* read() = 0;

   protected:
   std::string fileName;
};
Run Code Online (Sandbox Code Playgroud)

这两个都有从GraphReader/Graph继承的派生类.

class OgdfGraph : public Graph{
   public:
   OgdfGraph();
   virtual ~OgdfGraph();
   void setOgdfGraph(ogdf::Graph &oGraph);
   std::vector<std::shared_ptr<Node>> getNodes();
   std::vector<std::shared_ptr<Edge>> getEdges();
   void layout();

   private:
   [...]

};

class OgdfGmlReader : public GraphReader {  
   public:
   OgdfGmlReader(std::string fileName);
   virtual ~OgdfGmlReader(); …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance abstract-class abstract-base-class

2
推荐指数
1
解决办法
525
查看次数