Класс называется абстрактным, если в нем есть хотя бы один чисто виртуальный метод. Ну а интерфейс в принципе не может иметь реализацию. Таким образом, интерфейс средствами языка реализуется как абстрактный класс, все методы которого чисто виртуальные. Каждый интерфейс является абстрактным классом, не каждый абстрактный класс – интерфейс. Интерфейс содержит только public секцию, абстрактный класс не имеет ограничений. Интерфейс содержит только чисто виртуальные методы, абстрактный класс может содержать и поля, и обычные методы в добавок. Интерфейс реализуют, абстрактный класс наследуют.
Чисто виртуальная функция является функцией, которая объявляется в базовом классе, но не имеет в нем определения. Поскольку она не имеет определения, то есть тела в этом базовом классе, то всякий производный класс обязан иметь свою собственную версию определения. Объявление:
virtual тип имя_функции(список параметров) = 0;
Деструктор полиморфного базового класса должен объявляться виртуальным. Только так обеспечивается корректное разрушение объекта производного класса через указатель на соответствующий базовый класс. В главной функции указателю на базовый класс присваивается адрес динамически создаваемого объекта производного класса. Затем через этот указатель объект разрушается. При этом наличие виртуального деструктора базового класса обеспечивает вызовы деструкторов всех классов в ожидаемом порядке, а именно, в порядке, обратном вызовам конструкторов соответствующих классов.