Bonjour,
Je lance un peti topic sur la différence entre les fonctions virtuelles et les virtuelles pures. Je n'arrive pas bien à cerner la différence, pouvez vous m'éclairer ne serait-ce qu'un peu sur ce sujet ??
Merci à vous tous !
Bonjour,
Je lance un peti topic sur la différence entre les fonctions virtuelles et les virtuelles pures. Je n'arrive pas bien à cerner la différence, pouvez vous m'éclairer ne serait-ce qu'un peu sur ce sujet ??
Merci à vous tous !
Virtuelle non-pure signifie que la classe de base implémente un comportement par défaut, les dérivées ne sont pas obligées de redéfinir la fonction.
Virtuelle pure signifie au contraire une obligation de redéfinir la fonction pour les dérivée.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Ok, si j'ai bien compris, les prototypes des fonctions que je déclare dans ma classe de base suivie de "=0" sont des fonctions virtuelles pures, il est obligé de les implémenter plus tard dans toutes mes classes dérivées.
Alors que les fonctions que je déclare "virtual" dans ma classe abtraite(fonctions virtuelles non pures), je n'ai pas besoin de les implémenter dans mes classes dérivées.
Ai-je bien compris ?
Merci beaucoup...![]()
Oui tu as bien compris.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Je dirais redéfinir au lieu d'implémenter. Car particularité du C++ : une fonction membre virtuelle pure peut etre implémentée:
Le fait d'avoir au moins une fonction virtuelle pure rend ta classe abstraite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class A { public: virtual void Test() = 0 { } }; class B : public A { virtual void Test() {} };
Salut,
On peut juste rajouter le fait que, bien souvent, les fonctions virtuelle pures poursuivent un seul objectif: faire savoir à la classe de base (qui deviendra alors une "interface") que la fonction existe, mais que l'on ne dispose pas des informations nécessaire (au niveau de la classe de base) pour permettre de définir un comportement par défaut![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Comme conséquence, on peut noter que la classe de base ne sera pas instanciable mais que l'on sait d'ores et déjà que toutes ses classes filles implémentant les fonctions virtuelles pures auront une partie de l'interface (dont font partie les fonctions publiques) en commun avec la classe de base.
polymorphisme
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Partager