У меня есть трудности с наследованием на C++. Предположу, у меня есть базовый класс Parent:вызов родительского объекта Метод ребенка C++
class Parent{
public:
...
virtual Parent Intersection(Parent anotherParent);
}
и 2 классов дети числовой и символьный с реализацией методы Пересечения:
class Numeric : public Parent{
public:
...
Numeric Intersection(Numeric anotherNumeric)
{
...
}; // do intersection with another object numeric
}
// class Symbolic
class Symbolic : public Parent{
public:
...
symbolic Intersection(Symbolic anotherSymbolic)
{
...
}; // do intersection with another object symbolic
}
и последним классом ParentVector:
class ParentVector : public Parent{
public:
...
ParentVector Intersection(ParentVector anotherParentVector);
private:
std::vector<Parent> vtParent; // vector stock object Parent (Numeric or Symbolic)
}
Я хочу вектор vtParent stock 2 типа объекта: числовой или символический. Поэтому я создал вектор родительских объектов.
Проблема в следующем: я хочу получить пересечение 2 векторов ParentVector.
Я могу добавить объект Числовой или символьный в векторе vtParent, но I не может вызов метода Пересечение соответствует каждому типу объекта. Он всегда вызывает метод Пересечение класса Parent.
У кого-нибудь есть идеи или предложения? Большое спасибо.
// edit: Я забыл, что класс ParentVector также является родительским классом родительского класса.
// ОБНОВЛЕНИЕ: спасибо за все ваши полезные советы. Теперь я хочу, чтобы выполнить код ниже, чтобы вычислить пересечение 2 векторов Родитель:
ParentVector* Intersection(ParentVector anotherParentVector){
ParentVector* result;
Parent* tmp;
for(int i = 0; i < this->vtParent.size(i); i++){
// PROBLEM with this line because I don't write the code of
// function 'virtual Parent* Parent::Intersection(Parent anotherParent)'
*tmp = this->vtParent.at(i)->Intersection(anotherParentVector.getParentVector().at(i));
result->getParentVector.push_back(tmp);
}
}
Я не писать код функции «виртуального Родитель * Родитель :: Пересечения (Parent anotherParent)», так что я не может выполнить указанный выше код. У кого-то есть идея, как решить эту проблему?
// Здесь, идея, я хочу, чтобы вызвать функцию 'Числовых * Пересечение (Числовой anotherNumeric)' или 'Символическое * Пересечение (Символическое anotherSymbolic)'
// FINISH, спасибо за все ваши предложения.
У вас есть виртуальные функции с различными типами возврата. См. [This] (http://stackoverflow.com/questions/4665117/c-virtual-function-return-type). –