您好,感谢先进。
这是我的问题。我有这些课程:
- 级日期 级合同 级员工 -class节点 -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 */
这就是它的全部。我正在跳过运算符&lt;&lt;实现。现在,我将解释这个想法
Class Date只有元素属性(int day,int month,int year)。 类合同有两个类日期指针,因此合同与日期相关。 类Employee与一个用指针处理的契约有关联。
类节点有两个属性:第一个是指向Node的指针,其中包含一个名为Data的ObjectBase实例,第二个是指向另一个名为nextNode的Node实例的指针。
类列表在一个简单列表中处理节点指针。
我的问题:当我在列表中查找Employee并使用Find()函数访问Node中包含的Data时,它现在只显示在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;
}
}
}
带下划线的代码会出错。当我使用编译器并把“ - &gt;”签名它只显示BaseObject方法Clone()和toString(),我想使用Employees方法,虽然它现在是一个带有Employee实例的BaseObject指针。
如果我表达的话,请帮助我。
答案 0 :(得分:0)
您可以稍微更改一下您的实现并创建一个Comparable接口,并且所有BaseObject都具有可比性。
或者您可以在find方法中传递“比较器”功能。在此功能中,您需要进行一些演员表来验证您的实例是否为雇主并比较de Id。
我希望这可以提供帮助。
佩德罗