Как записать разные классы в одну переменную? Мне нужно реализовать разный функционал одной функции в нескольких классах и потом иметь возможность вызвать эту функцию. Пытался сделать через наследование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)
Проблема здесь заключается в том, что вы создаете экземпляр класса 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().
Проблема здесь заключается в том, что вы создаете экземпляр класса 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().