У меня есть шаблон класса, в котором некоторые методы определены как виртуальные, чтобы дать возможность пользователю моего класса дать реализацию для него в своем производном классе. Обратите внимание, что в моем шаблонном классе есть некоторые не виртуальные методы, которые используют виртуальный (виртуальный класс, который должен возвращать значение, вызывается в не виртуальном классе).
Можете ли вы дать мне простой пример правильного кода, где виртуальный метод родительского класса должен возвращать значение (но его реализация предоставляется в дочернем классе), а значение, возвращаемое виртуальным методом в родительском классе, равно используется в других методах этого класса. Потому что я где-то видел (например, здесь: Безопасное переопределение виртуальных функций C ++ ), что это может вызвать некоторые проблемы, и определенный пользователем метод заметит переопределение виртуального метода родительского класса.
Примечание: я программирую с Code :: Blocks, используя компилятор g ++.
РЕДАКТИРОВАТЬ: как требуется здесь простой пример того, что я хочу:
template<typename T>
class parent {
public:
// Public methods that user can call
int getSomething(T t);
void putSomething(T t, int x);
// public method that user should implement in his code
virtual float compute(T t) { }
// protected or private methods and attributes used internally by putSomething ...
float doComplexeThings(...); // this can call
};
Метод compute () должен быть реализован пользователем (дочерним классом). Однако этот метод compute () вызывается, например, методами putSomething () и doComplexeThings ().