Note: ce message fait suite à la discussion qui se situe ici =
https://www.jeuxvideo.com/forums/1-47-61904-2-0-1-0-c-question-de-poo.htm#message_61975
« Si, je te dis que classe abstraite = abstraite pure, c'est un abus de langage. »
non, non, et encore non. C'est toi qui n'a pas compris toutes les subtilités des classes abstraites en C++. Tu pourras me chanter tout ce que tu voudras mais :
class Pure
{
public:
virtual ~Pure() =0;
};
est une classe virutelle (le destructeur est une méthode virtuelle à cause du mot clé virtual) pure (le destructeur est volontairement indéfini grâce/à cause du "=0"),
alors que
class JusteVirtuelle
{
public:
virtual ~JusteVirtuelle() {}
};
est virtuelle (le destructeur est toujours une méthode virtuelle ici) mais ENTIÈREMENT DÉFINIE (j'ai fourni un code par défaut pour toutes les méthodes virtuelles) donc impure !
D'ailleurs, pour finir de te convaincre qu'il y a une réelle différence entre abstrait pur et abstrait impur, je t'invite à essayer le main suivant :
int main()
{
JusteVirtuelle v; // parfaitement valide
Pure p; // non valide, il n'existe de pas de code pour
// au moins une des méthode (le destructeur, en
// l'occurence), donc on ne peut pas créer un
// objet instance de la classe Pure
return 0;
}
Compile avec -Wall -Wextra et tu verras.
« Et par rapport a ça, non en effet niveau expressivité ça apporte pas forcément quelque chose, mais au niveau sécurité et séparation pour moi c'est clair que c'est important. »
tu confonds clairement la compilation séparée et le polymorphisme toi. Ou pire, tu utilises des classes abstraites absolument pas pour ce à quoi elles servent.
« Par exemple comment tu veux faire faire une implémentation par quelqu'un sans classe abstraite? »
demande à Linus Torvald comment il a fait pour écrire son Linux en C. 
Plus concrètement, heureusement qu'on peut définir des interfaces + implantations sans classes abstraites, parce que beaucoup de langages n'ont pas ce concept.
Et encore une fois, la programmation modulaire (séparer/masquer du code à l'aide d'interfaces+implantations) n'a pas grand chose à voir avec les classes abstraites. 