Как записать разные классы в одну переменную? Мне нужно реализовать разный функционал одной функции в нескольких классах и потом иметь возможность вызвать эту функцию.
Пытался сделать через наследование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
242 +1
2
Ответы
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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир