Когда виртуальный метод должен быть чистым?

Я нашел код, над которым я работаю, и мне было интересно, какая реализация проекта лучше всего.

Если базовый класс определяет метод как виртуальный,но также реализует пустое тело, поэтому не требует, чтобы производные классы реализовывали тело, не следует ли вместо этого сделать его чистым?

virtual void AMethod1() {}                 // 1
virtual void AMethod2() {assert(false);}   // 2
virtual void AMethod3() = 0;               // 3
  1. Текущий код.
  2. Идея1: Предупреждает пользователя, что этот производный объект не реализовал это тело метода .
  3. Idea2: Заставляет производные классы реализовывать тело, пустое или нет.

Что вы, заслуживающие доверия замечательные люди из SO, думаете?


Edit1: После публикации (и чтения ответов) я понимаю, что assert это плохо!

virtual void AMethod3() = {throw (ENotImplemented)};               // 4
9
задан Kara 28 June 2013 в 23:52
поделиться