C ++调用DerivedClass函数不是从BaseClass指针继承的

时间:2013-04-12 05:25:33

标签: c++ derived-class base-class

您好,感谢先进。

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

- 级日期 级合同 级员工 -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指针。

如果我表达的话,请帮助我。

1 个答案:

答案 0 :(得分:0)

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

或者您可以在find方法中传递“比较器”功能。在此功能中,您需要进行一些演员表来验证您的实例是否为雇主并比较de Id。

我希望这可以提供帮助。

佩德罗