Это чистый абстрактный класс?
class C
{
public:
static const std::string S;
C() {}
virtual ~C() {}
virtual void v() = 0;
}
Я считаю, что это не так, следуя этому определению из WikiBooks:
Чистый абстрактный класс имеет только абстрактные функции-члены и не содержит данных или конкретных функций-членов.
Он не может быть чисто абстрактным, поскольку не имеет только абстрактных функций-членов:
- У него есть виртуальный деструктор, который является функцией-членом, но не абстрактным. Это не чистый деструктор. Обратите внимание, что "абстрактный метод" и "чисто виртуальная функция" - это одно и то же, а термины "метод" и "функция" являются синонимами.
- У него есть атрибут S, который представляет данные.
Теперь мои учителя утверждают, что это чистый абстрактный класс, потому что:
Константы, включенные в чистый виртуальный класс, не считаются атрибутами. Они являются неизменными элементами класса и поэтому не нарушают его абстрактность. То же самое относится и к статическим методам.