Я хочу написать интерфейсный класс на C ++, который является чисто виртуальным абстрактным базовым классом.
Могу ли я определить конструкторы в этом классе интерфейса? Конструктор не может быть чисто виртуальной функцией, но как я могу определить конструкторы для класса интерфейса?
Редактировать: мне нужен виртуальный деструктор в таком классе интерфейса?
На самом деле есть два вопроса в одном:
Конструктор не может быть чисто виртуальной функцией
TL / DR: если вы пытаетесь добавить конструктор к вашему интерфейс, тогда это уже не интерфейс, а простой абстрактный базовый класс, который вполне может иметь его.
C ++ не имеет понятия интерфейса. Есть конкретные классы и абстрактные классы, не более того. Абстрактные классы могут иметь конструкторы, члены данных и все остальное. Единственное, что нужно для пометки абстракта класса — это одна чисто виртуальная функция-член.
Некоторые люди используют слово «интерфейс» для обозначения абстрактного класса без каких-либо элементов данных или функций, не являющихся чисто виртуальными. Другие люди используют немного другие определения. Точное определение не имеет никакого значения для языка. Вы можете иметь члены данных и определять конструктор, и все же называть свой класс интерфейсом, никто не собирается давать вам указание на это. Или вы можете просто избежать этого термина.