Pour repondre a l'auteur en C++, les interfaces et les classes abstraites c'est techniquement la meme chose sauf que selon le cas où l'on va les utiliser cela portera un nom differents.
La classes abstraite intervient souvent apres la creation des classes classique : Ca vient des math en fait c'est le concept de la factorisation (developper/factoriser/identitee remarquable... tout ca) en programmation on parle souvent de Refactor.
Ademetons tu creer deux classes Voiture et Camion, et tu t'appercois que les deux clases ont beaucoup d'elements ou de caracteristique en communs et bien tu les regroupes dans une classe parente (bon faut avoir compris la notion d'heritage des classes auparavant), que l'on appellera la Class Vehicule.
Et bien comme il n'existe pas de vehicule a proprement parler dans la realite (le vehicule est un donc une notion abstraite ) alors cette class ne seras jamais instancier et du coup la Classe Vehicule devient abstraite.
Le fait de mettre une fonction ou methode virtuel pure sert juste d'indicateur technique au compilateur pour empecher toutes instantiation de la classe par megarde.
Les interfaces servent surtout quand on veux faire de l'heritage multiple sans tomber sur des problemes complexes que l'on trouve en faisant de l'heritage multiples avec des classes ordinaires. (Les interfaces sont moins maelables mais le code est plus facile a lire et a entretenir.)
TLDR: Les interfaces et classes abstraite servent surtout a rendre le code source plus lisible et facile a maintenir, c'est juste de l'organisation.