Как записать разные классы в одну переменную? Мне нужно реализовать разный функционал одной функции в нескольких классах и потом иметь возможность вызвать эту функцию.
Пытался сделать через наследованиеEXP.h
class Exp
{
public:
int CALL();
};
EXP.cpp
int EXP::CALL()
{
return 0;
}Uses.h
class Uses : public EXP
{
int result = 5;
public:
int CALL();
};
Uses.cpp
int Uses::CALL()
{
return result;
}
И еще есть немного похожих классов...
Сохранять пытаюсь вот так:EXP* exp = new Uses();
exp->CALL();
Проблема в том что почему то CALL всегда возвращает 0 (Ну можно и другое... Короче то что прописано в return EXP.cpp)

21 Авг 2019 в 06:22
224 +1
1
Ответы
1

Проблема здесь заключается в том, что вы создаете экземпляр класса Uses, а сохраняете указатель на объект типа Exp. При вызове метода CALL() через указатель на Exp, будет вызван метод CALL() из базового класса Exp, а не переопределенный метод из класса Uses.

Чтобы решить эту проблему, вам нужно сделать метод CALL() виртуальным в базовом классе Exp, а затем переопределить его в классах-наследниках. Вот как это можно сделать:

EXP.h

class Exp
{
public:
virtual int CALL();
};

EXP.cpp

int EXP::CALL()
{
return 0;
}

Uses.h

class Uses : public Exp
{
int result = 5;
public:
int CALL() override;
};

Uses.cpp

int Uses::CALL()
{
return result;
}

Теперь, при вызове метода CALL() через указатель на объект базового класса Exp, будет вызван переопределенный метод из класса Uses. Таким образом, ваши классы-наследники смогут иметь различное поведение для функции CALL().

20 Апр 2024 в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 005 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир