Я пытаюсь создать класс, который будет служить базовым объектом, который затем будет разделен на подклассы (= реализован) для различных целей.
Я хочу определить одну или несколько чисто виртуальных функций, чтобы, однако, подклассы базового класса были обязательными и не забывали их реализовывать.
Существует одно предупреждение: сигнатура чисто виртуальной функции включает тип базового объекта. Разумеется, после подкласса определение функции больше не соответствует определению базовых классов. E.g.:
class BaseItem
{
public:
virtual std::string getDifferences(const BaseItem& item) = 0;
}
Итак, в производном классе я хотел бы сделать:
class DerivedClass : public BaseItem
{
public:
virtual std::string getDifferences(const DerivedClass& item) = 0;
private:
std::string derivedItemCustomObject;
}
, что, конечно, компилятор не примет. Конечно, я мог бы сделать это BaseItem
, но тогда я не смогу использовать какие-либо объекты в производном классе.
Должен ли я использовать кастинг, чтобы выполнить это?
Пожалуйста, дайте мне знать, если мое намерение / вопрос не ясен.