0

您好,在此先感谢您。

这是我的问题。我有这些课程:

-class Date -class Contract -class Employee -class Node -class List

所有的类都派生自这个类 BaseObject。它有这个代码:

#ifndef BASEOBJECT_H
#define BASEOBJECT_H
#include<iostream>
using namespace std;

class BaseObject{
public:
virtual string toString() const=0;
virtual BaseObject* clone() const=0;
};

ostream& operator << (ostream&, objetoBase&);


#endif  /* BASEOBJECT_H */

这就是它的全部。我正在跳过运算符 << 实现。现在,我将解释这个想法

Date 类只有基本属性(int day、int month、int year)。类 Contract 有两个类 Date 指针,因此 Contract 通过组合与 Date 相关。Employee 类与一个用指针处理的 Contract 有关联。

类 Node 有两个属性:第一个是指向包含名为 Data 的 ObjectBase 实例的 Node 的指针,第二个是指向另一个名为 nextNode 的 Node 实例的指针。

类 List 处理简单列表中的节点指针。

我的问题:当我在列表中查找 Employee 并使用 Find() 函数访问 Node 中包含的数据时,它现在只显示在 BaseObject 中创建的方法!我该如何解决这个问题?我把代码留给你。第一个和当前是节点。

BaseObject * List :: find (string id) {
        if (first == NULL)
            return NULL;
        else
        if (first-> getData () -> == getId() id) //This line is underlined in compiler
            return first-> getData ();
        else {
            current = first;
        if (current-> getNextNode () == NULL)
            return NULL;
        else {
        while (current-> getNextNode () -> getNextNode ()! = NULL && Current-> getNextNode () -> getData () -> getId ()! = id) {
            current = current-> getNextNode ();}
        if (current-> getNextNode () -> getData () -> getId () == id)
            return current-> getNextNode () -> getData ();
        else
            return NULL;
        }
    }
}

带下划线的代码会导致错误。当我使用编译器并加上“->”符号时,它只显示 BaseObject 方法 Clone() 和 toString(),我想使用 Employees 方法,尽管它现在是一个 BaseObject 指针,其中包含一个 Employee 实例。

如果我表达得很好,请帮助我。

4

1 回答 1

0

您可以稍微更改您的实现并创建一个 Comparable 接口,并且您的所有 BaseObject 都是可比较的。

或者你可以在你的 find 方法中传递一个“比较器”函数。在此函数中,您需要进行一些强制转换以验证您的实例是否为 Employer 并比较 de Id。

我希望这会有所帮助。

佩德罗

于 2013-04-12T06:10:59.657 回答