Знаю, что согласно стандарту, интерфейсный класс - который не имеет переменных-членов и все методы которого являются чистыми виртуальными функциями. Собственно вопрос, если в интерфейсном классе присутствует статический метод - значит класс перестает быть интерфейсом и становится абстрактным классом? хотелось бы разобраться, спасибо!
-
Какому стандарту? В С++ нет термина "интерфейсный класс". – HolyBlackCat Sep 07 '21 at 17:54
1 Answers
ок, поищем в стандарте
10.4 Abstract classes An abstract class can also be used to define an interface for which derived classes provide a variety of implementations
далее
An abstract class is a class that can be used only as a base class of some other class; no objects of an abstract class can be created except as subobjects of a class derived from it. A class is abstract if it has at least one pure virtual function.
То есть, если класс абстрактный, он может использоваться как интерфейс. Там нет упоминания об отсутствии переменных-членов или то, что все функции должны быть виртуальными. Только о том, что хотя бы одна.
В целом, раньше оно так и было, что только виртуальные функции. И java, как язык, который пытается быть чисто ООП (хотя по факту таким не является), предоставлял такую сущность как интерфейс. Почему предоставлял? да потому что теперь интерфейсы в java могут иметь "реализации по умолчанию", но при этом все равно быть интерфейсами.
Поэтому, скорее всего ответ будет такой - все зависит от Вашего виденья или принятых в команде соглашений. По моему мнению - да, может быть статическая функция. Но скорее всего найдутся люди, которые будут считать, что класс не может быть интерфейсом, если его имя не начинается на букву I.
Вот ещё один вопрос, где я более подробно отвечал и там много интересных комментариев Отличия абстрактного класса от интерфейса (abstract class and interface)
- 112,121
- 6
- 94
- 160