Проблема в том, что ExampleIt
наследует (и переопределяет методы) из класса It
, поэтому при перегрузке оператора в классе Wrapped
(который вызывает некоторые методы из It
, который должен быть переопределен ExampleIt
.
Требуемый эффект заключается в том, что при перегрузке operator*
я должен иметь возможность вызвать *name_of_Wrapped_class
, и это должно выполнить виртуальный метод dereference
(из It
), который должен быть переопределен на ExampleIt
.
class It {
public:
virtual std::pair<int, std::string> dereference() const;
};
class ExampleIt : It {
public:
std::pair<int, std::string> dereference() const override;
};
class Wrapped : It{ //??? not sure about that
public:
std::pair<int, std::string> operator*() const; // it should call for dereference()
};