переопределить виртуальный метод C ++

у меня есть шаблон класса, в котором некоторые методы определены как виртуальные, чтобы дать возможность пользователю моего класса предоставить им реализацию в своем производном классе. Обратите внимание, что в моем классе-шаблоне есть несколько невиртуальных методов, которые используют виртуальный (виртуальный класс, который должен возвращать значение, вызывается в невиртуальном классе).

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

12
задан Community 23 May 2017 в 12:02
поделиться