Я думаю, что вы смешиваете термины ...
virtual void x() = 0;
- это чисто виртуальная функция или абстрактная функция. Это виртуальная функция без реализации. Вы говорите о чистом абстрактном классе, который является эквивалентом интерфейса на языке c ++, о классе, имеющем только абстрактные функции.
virtual void x();
- это виртуальная функция, то есть она может быть переопределена в производных классах, но она не является абстрактной, поэтому вы должны предоставить реализацию для нее.