производный класс — C ++ Вызов функции DerivedClass, не унаследованной от указателя BaseClass

Привет и спасибо заранее.

Вот моя проблема. У меня есть эти классы:

-Дата урока
Контракт
сотрудник
-класс
Список

Все классы являются производными от этого класса 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).
Контракт класса имеет два указателя даты класса, поэтому контракт связан с датой по составу.
Класс Сотрудник имеет связь с одним Контрактом, обработанным указателем.

Класс Node имеет два атрибута: первый — указатель на Node, который содержит экземпляр ObjectBase с именем Data, второй — указатель на другой экземпляр Node с именем nextNode.

Class List обрабатывает указатели узлов в виде простого списка.

Мой вопрос: когда я ищу сотрудника в списке и использую функцию 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 внутри него.

Пожалуйста, помогите мне, если я хорошо выразил.

0

Решение

Вы можете немного изменить свою реализацию и создать Comparable интерфейс, и все ваши BaseObject будут сравнимы.

Или вы можете передать функцию сравнения в ваш метод поиска. В этой функции вам нужно будет сделать несколько приведений, чтобы проверить, является ли ваш экземпляр работодателем, и сравнить де-идентификатор.

Я надеюсь, что это может помочь.

Pedro

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector