【问题标题】:Class hierarchy Loop - High Level Design Suggestions类层次循环 - 高级设计建议
【发布时间】:2012-10-11 01:24:42
【问题描述】:

在这个程序的高级设计方面我需要一点帮助。

我正在根据 XML 描述手动创建类对象。它具有定义硬件设置的节点。问题是 XML 中的节点可以简单地按名称指向其他节点。为了能够根据名称快速找到这些节点对象的地址,我使用了地图。这是简化的视图:

class XMLfile
{
    public:
        Node* GetNode(const string FeatName);   //Searches through "nodes" map to get pointer to     Node
    private:
         map<std::string, Node*> nodes;
};

然后我定义节点如下:

class Node
{
    public:
        virtual int GetValue();
        virtual int Load(XML_type);
};

然后根据节点的确切“类型”,我创建了一些带有附加变量的派生类。

class Integer: public Node
{
    int IntegerSpecificVar;
    int GetValue();
    int Load(XML_type);
    private:    
       int Value;
       string p_Value;
};

XML 可以是以下两种之一:

<Value>5</value>    Which my object load will load 5 into int Value.
or
<p_Value>NodeName</p_Value>  Which my object loader will load the string into p_Value.

根据 XML 中的对象,GetValue() 返回 int 值,或指向具有不同节点名的字符串的指针。如果它是一个指针,我需要获取指向该节点的指针,然后对该对象调用 GetValue。我真正想做的是调用 XML::GetNode(nodename") 但这不符合上下文。

让我的 Node 对象访问该映射的一个想法是创建从 XMLfile 派生的类 Node:

class Node: public XMLfile

然后我得到循环引用,因为它还没有加载。如果我在类 Node 和类 XMLfile 之间切换顺序,那么 XMLfile 不知道 Node 类/类型是什么。请注意,目前这一切都在一个大文件中。

如果有人能就如何更好地安排这一点提供一般性建议,我们将不胜感激。

【问题讨论】:

  • 在你的 Node 中放置一个 XMLFile 指针怎么样?

标签: c++ oop


【解决方案1】:

Node 视为XMLfile 的特定情况是个坏主意,因此不要从另一个派生。继承是指A 'is-a' B的关系。

【讨论】:

    【解决方案2】:

    快速且可能很脏的解决方案:

    1. 将地图设为GetValue的参数,或者
    2. Node 中存储一个(常量)引用或指向地图的指针。

    【讨论】:

    • 我了解这两种解决方案。但更合适的架构解决方案是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多