如何使用不同类型的节点实现图形?

时间:2013-09-24 09:24:18

标签: c++ oop inheritance polymorphism

我是C ++编程的新手,我正在尝试用C ++实现一个场景图。

应该有一个Node类,它是超类(和一个抽象类)和一些子类,如Geometry,Group,Transformation等。我需要实现一个图,其中子类对象中的任何一个都可以是节点。每个节点可以有一个或多个子节点。 (子类中有常用的方法和属性以及不同的方法和属性。)

我需要创建一个图表,我可以添加,删除节点并执行常用方法,无论其类型如何。

任何人都可以分享任何想法或方法来实现这样的图表吗?

编辑:这是我作品的样本定义。 (我只添加标题内容。但如果需要实现,我会提供。)

node.h

using namespace std;

#include <cstdio>
#include <string>
#include <vector>

#ifndef NODE_H
#define NODE_H

class Node{
public:
  Node();
  virtual ~Node() = 0;
  Node(string name);

  string getName();
  void setName(string name);

  vector<Node*> getChildrenNodes();
  size_t getChildNodeCount();
  Node* getChildNodeAt(int i);
  void setChildernNodes(vector<Node*> children);

  void addChildNode(Node* child);

  virtual string getNodeType()=0; // to make this class abstract

protected:
  string name;
  vector<Node*> children;
};
#endif

geometry.h

class Geometry :  public Node {
public:
    Geometry();
    ~Geometry();
    string getNodeType();
    // Method overrides and other class specific methods.
};

graph.h

#include "node.h"

class Graph{
public:
    Graph();
    ~Graph();
    void addNode(Node* parent,Node* child);
    void addNode(Node* child);
    Node* getRoot();
private:
    Node* root;
};

这是我的main.cpp

#include <cstdio>
#include <stdio.h>
#include <iostream>

#include "node.h"
#include "graph.h"

int main(){

    Graph sg;
    Geometry g1;

    sg.addNode(g1); // error: no matching function for call to ‘Graph::addNode(Geometry&)’

    return 0;
}

如果可以,请说明我出错的地方。

0 个答案:

没有答案