116Fermer118
Kevin KoflerLe 25/04/2010 à 07:15
Souane (./115) :
L'interface c'est la même chose sauf qu'aucune méthode n'est implémentée et qu'il n'y a pas de variable non plus (attributs). En Java, contrairement aux classes abstraites, une classe peut implémenter plusieurs interfaces (alors qu'une classe ne peut descendre que d'une seule super classe... je crois que ce n'est pas le cas en C++ par contre).

Effectivement, le C++ permet l'héritage multiple.

En revanche, on retrouve un fonctionnement similaire au Java avec QObject: un QObject peut hériter de plusieurs objets C++ "normaux" (ce qui comprend aussi les interfaces abstraites), mais d'un seul QObject (qui doit être le premier dans la liste, en gros parce que le C++ ne distingue pas extends et implements, la raison technique précise est plutôt longue à expliquer).
(ça commence à devenir pratique quand tu as 100 différentes sous-classes, et tu ne vas pas t'amuser à faire des trucs du genre "if (object == (Object) Shape1 OR object == (Object) Shape2 OR ... OR object == (Object) Shape100 trinon)

En revanche, if (object instanceof Circle) marche plutôt bien. (En C++, on utiliserait qobject_cast ou dynamic_cast.) Il y a des fois où c'est plus adapté que les méthodes virtuelles. Mais c'est moins "objet".