у меня есть шаблон класса, в котором некоторые методы определены как виртуальные, чтобы дать возможность пользователю моего класса предоставить им реализацию в своем производном классе. Обратите внимание, что в моем классе-шаблоне есть несколько невиртуальных методов, которые используют виртуальный (виртуальный класс, который должен возвращать значение, вызывается в невиртуальном классе).
Не могли бы вы дать мне простой пример правильного кода, в котором виртуальный метод родительского класса должен возвращать значение (но его реализация предоставляется в дочернем классе), а значение, возвращаемое виртуальным методом в родительском классе, равно используется в других методах этого класса. Потому что я где-то видел (например, здесь: Безопасное переопределение виртуальных функций C ++ ), что это может вызвать некоторые проблемы, и определяемый пользователем метод заметит переопределение виртуального метода родительского класса.
Примечание: я программирую с помощью Code :: Blocks, используя компилятор g ++.
РЕДАКТИРОВАТЬ: как просил здесь простой пример того, что я хочу:
template
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 ().