Y'a pas de souci.
Dans ton cas les classes Icones devraient être suffisamment petites pour que leur déclaration tienne en une ligne à chaque fois (faut compacter un peu quoi), donc c'est très bien…
Faut pas écouter Kevin qui part dans son délire…
Ce n'est pas un délire, c'est totalement idiot d'avoir une classe différente pour chaque icône, c'est la même classe d'objet (=> une seule classe Icon) avec un paramètre, la méthode appelée en cas de clic => slot ou équivalent (pointeur de fonction, foncteur*, listener** etc.).
* Un foncteur en C++ est une classe qui implémente un operator(). Mais on se retrouve là aussi avec une explosion de classes, à moins que le foncteur ne soit qu'un wrapper autour d'un pointeur de fonction par exemple.
** Style Java. Comme un foncteur, sauf que l'operator() ne s'appelle pas operator(). Même problème que pour le foncteur: bonjour l'explosion de classes!
faux avec les classes anonymes, on n'a besoin que de très peu de code même si le compilateur se démerde (et au final on a un jar, alors bon osef du nb de classes)
J'ai pas bien comrpis le problème, mais je te conseille de regarder les functor.
Oui Kevin, c’est vrai qu’avec des signals/slots ça prend moins de code, mais en attendant c’est pas si grave d’utiliser plusieurs classes juste pour ça…

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
Ah, et au fait, question qui m'a travaillée toute la journée sur mon chantier :
Quelle est la différence entre une méthode normale et son équivalent virtuelle ? La virtuelle a une imlémentation mais peut être redéfinie ?
Quelle est la différence entre une méthode virtuelle et une méthode virtuelle pure ? La virtuelle pure n'a pas d'implémentation et peut (doit ?) être redéfinie ?
Je suis preneur d'un tuto sur la virtualité, vraiment sur le concept, le bouquin que j'ai propose plein d'exmples, mais sans expliquer simplement le concept, par exemple avec un tableau bien clair. Du coup, je ne peux qu'essayer de faire des analogies avec les cas dans lesquels je me trouve, et c'est chiant parce que c'est toujours un peu pifométrique comme manière de faire... Donc si vous avec un lien expliquant ce principe de manière claire et concise, je me précipite.
(ps -> j'avais pas pensé à WP, je vais voir, et vous dirai si c'est suffisant)
protip: toutes les méthodes du java sont virtuelles sauf indication contraire (final), c'est une feature du langage. Juste pour info.
Finalement
- il n'y a que les méthodes qu'on compte redéfinir dans des classes filles qu'il faut déclarer virtuelles (et s'il y en a, le destructeur doit l'être aussi).
- Les classes abrstraites ont des méthodes virtuelles pures
Et valà, après on fait la tambouille.
Au fait, il y a des cas où on ne veut pas utiliser le polymorphisme, et donc ne pas déclarer une fonction virtuelle ?
Oué, mais s'il n'y a pas de classe fille, il n' y a pas de polymorphisme donc c'est réglé ^^
Je me demande si c’est une bonne idée que des classes comportent de telles limitations intrinsèquement (méthodes non virtuelles). Pour le côté performances c’est une très bonne chose, mais pour l’extensibilité… On ne prévoit pas forcément correctement dès le départ quelles opérations seront susceptibles d’être redéfinies dans des classes filles.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
pourquoi ce serait pas un job du compilo, de savoir si une méthode est virtuelle ou pas? il le sait, le compilo, qu'une classe a été étendue et qu'une méthode a été overridée...
Pas forcément, en C++ la compilation séparée ne permet pas de conserver ce type d’information.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
GoldenCrystal Le 11/05/2010 à 21:11Edité par GoldenCrystal le 11/05/2010 à 21:13 De toutes façons, c'est au concepteur de l'objet de décider quelle méthode doit être virtuelle ou non, et ça s'arrête là.
Personne d'autre n'a son mot à dire.
Si je décide que mon crocodile ne peut jamais être autre chose que de couleur verte ( if (color.G < Max(color.R, color.B)) throw […]; ) j'ai tout à fait le droit, et je vois pas en quoi ça serait légitime que M. Ducpont vienne changer ça pour que mon croco devienne bleu ou arc-en-ciel…