Как использовать объекты-наследники в функциях родительского класса в C++? Суть такова. У меня есть два класса: MovableObject и GravitySource, наследуемый от предыдущего (т.к. источники гравитации тоже могут двигаться). В классе MovableObject есть функция integrate, вычисляющая параметры движения на основе списка переданных в нее источников гравитации. Но т.к. GravitySource наследуется от этого класса, я не могу передать его в эту функцию. А создавать дубликаты родительских функций не хотелось бы (он ведь все таки тоже должен двигаться и тоже содержать пресловутую integrate). Какой выход из этой ситуации можно найти?

21 Авг 2019 в 07:07
168 +1
0
Ответы
1

Для решения данной проблемы можно воспользоваться механизмом полиморфизма в C++. В классе MovableObject можно использовать указатель на базовый класс GravitySource в качестве аргумента функции integrate. Таким образом, в функцию integrate можно передавать объекты как класса GravitySource, так и его наследников.

Пример:

#include <iostream>
#include <vector>
class GravitySource {
public:
virtual void applyGravity() {
// применяем гравитацию
}
};
class MovableObject {
public:
void integrate(GravitySource* gravitySource) {
gravitySource->applyGravity();
// реализация вычислений движения
}
};
class Planet : public GravitySource {
public:
void applyGravity() override {
// применяем гравитацию планеты
}
};
class BlackHole : public GravitySource {
public:
void applyGravity() override {
// применяем гравитацию черной дыры
}
};
int main() {
MovableObject object;
Planet planet;
BlackHole blackHole;
object.integrate(&planet);
object.integrate(&blackHole);
return 0;
}

В данном примере мы создаем два класса-наследника от GravitySource (Planet и BlackHole) и передаем их в функцию integrate класса MovableObject. Таким образом, мы можем использовать объекты-наследники в функциях родительского класса, не создавая дубликаты функций.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир