Tester si un Objet est d'un type précis ? [C++ débutant] - C++ - Programmation
Marsh Posté le 26-02-2006 à 23:08:56
RTTI mais c'est moche.
Pourquoi as tu besoin de tester ? Le polymorphisme ne subvient il pas a tes besoin ?
Marsh Posté le 26-02-2006 à 23:14:10
meme reponse que joel : c'est possible, mais tu devrais pouvoir t'en passer. C'est que ton design boite quelque part
Marsh Posté le 26-02-2006 à 23:18:56
J'ai une liste d'objets, et ces objets peuvent etre soit des Formes soit des Groupes (de formes). Mon print() fait ça pour le moment:
Liste (4 elements):
<=> Triangle
<=> Carré
<=> GROUPE 1
<=> GROUPE 2
Et maintentnant, j'aimerais, quand un groupe est présent, faire afficher en plus le contenu de ce groupe, genre comme ça
Liste (4 elements):
<=> Triangle
<=> Carré
<=> GROUPE 1 (Parallelogramme, Rond)
<=> GROUPE 2 (Carre2, Triangle2, Parallelogramme2)
Et alors j'ai besoin de faire la différence entre un maillon de type Groupe et un maillon de type Forme.
Le print, si ça peut vous aider:
Code :
|
Il peut y avoir autant de groupes imbriqués que l'on veut !
Marsh Posté le 26-02-2006 à 23:20:49
bin ouais, erreur de design. Tu dois appeler objet::print(), fonction virtuelle qui sera redefinie dans chaque sous classe, pas faire l'affichage dans liste
Marsh Posté le 26-02-2006 à 23:38:01
Joel F a écrit : RTTI mais c'est moche. |
Le typeid() me dit que tous les membres de la liste sont ... des Objets ça, je le savais ! Je voulais qu'il me précise s'il s'agit d'un objet FORME ou d'un objet GROUPE ! Une idée ?
Marsh Posté le 26-02-2006 à 23:48:34
ParadoX a écrit : Le typeid() me dit que tous les membres de la liste sont ... des Objets ça, je le savais ! Je voulais qu'il me précise s'il s'agit d'un objet FORME ou d'un objet GROUPE ! Une idée ? |
faut voir comment tu t'en sert et si tes objets sont réellement polymorphiques (j'en doute), fais comme on t'a dis car la tu n'a absolument pas besoin de ca
Marsh Posté le 26-02-2006 à 23:53:45
Je ne comprends pas ce que vous voulez dire avec "Polymorphiques"
Je m'en sers comme ds les exemples que j'ai trouvés sur le net, mais d'après leurs exemples ça devrait fonctionner ... et pas chez moi
Genre ici:
http://www.cppfrance.com/code.aspx?ID=35631
J'ai bien moi aussi ma classe mère Objet, puis Forme et Groupe qui héritent d'Objet.
Je vais tenter autrement, mais c'est dommage, j'aurais bien voulu savoir pourquoi ça coince
Marsh Posté le 26-02-2006 à 23:56:08
reposte le code de ta classe liste ?
Sinon ta methode est de toute facon pas bonne : si tu rajoutes une nouvelle forme (genre ellipse...) fodra aller modifier la classe liste pour que ca fonctionne tjs : ca n'a pas de sens
Marsh Posté le 26-02-2006 à 23:57:01
ParadoX a écrit : Je ne comprends pas ce que vous voulez dire avec "Polymorphiques" |
faudrait qu'il y ai au moins une méthode virtuelle dans la classe mere pour qu'elle soit polymorphique
Marsh Posté le 27-02-2006 à 00:01:11
chrisbk a écrit : |
Bah non ^^ Une Ellipse serait une Forme particulière !
Citation : reposte le code de ta classe liste ? |
Code :
|
M'enfin pkoi tu veux ça ? ^^
Marsh Posté le 27-02-2006 à 00:04:02
parce que dans tes Noeuds tu stocke un "Objet", ton polymorphisme on dirait bien qu'il passe a la trappe
Marsh Posté le 27-02-2006 à 00:06:11
Mais je suis bien obligé de faire une Liste générique, sinon je ne pourrais pas mélanger Formes et Groupes !
Marsh Posté le 27-02-2006 à 00:08:19
c'est balaise le C++ hein ?
Faudrait que tu stockes des Objets * pour que le monde soit content. Dure la vie...
Marsh Posté le 27-02-2006 à 00:09:03
Zetes chiants
Merci, jy replonge
Marsh Posté le 27-02-2006 à 00:12:13
moi je comprends pas comment ca pouvais marcher ?
Liste (4 elements):
<=> Triangle
<=> Carré
<=> GROUPE 1 (Parallelogramme, Rond)
<=> GROUPE 2 (Carre2, Triangle2, Parallelogramme2)
Marsh Posté le 27-02-2006 à 00:15:39
skelter a écrit : moi je comprends pas comment ca pouvais marcher ? |
J'aurais, pour chaque element ( chez moi donc monIterateur.valeur()), testé s'il s'agit d'un groupe ou d'une forme. Si c'est une forme, je laisse comme c'est actuellement (monIterateur.valeur().nom) ... et s'il s'agit d'un groupe, j'aurais fait un print récursiv sur ce groupe. Jsuis clair ?
Marsh Posté le 27-02-2006 à 00:16:47
ParadoX a écrit : Jsuis clair ? |
ué. ce qui est surtout clair c'est que tu fais du boulot pas du tout au bon endroit. C'est pas a la liste de savoir comment afficher un objet, mais a un objet de s'avoir s'afficher
Marsh Posté le 27-02-2006 à 00:16:50
chrisbk a écrit : fait voir la def de Objet ? |
Code :
|
Marsh Posté le 27-02-2006 à 00:17:33
ReplyMarsh Posté le 27-02-2006 à 00:18:06
chrisbk a écrit : gru §§ |
ça, c'était parce qu'on avait pas droit à la classe String, remember ?
Et puis ça à quoi de pas catholique ? ça marche très bien
Marsh Posté le 27-02-2006 à 00:18:12
Code :
|
Marsh Posté le 27-02-2006 à 00:18:42
ParadoX a écrit : ça, c'était parce qu'on avait pas droit à la classe String, remember ? |
mais nan quoi
Marsh Posté le 27-02-2006 à 00:19:12
ça change quoi, techniquement ?
Marsh Posté le 27-02-2006 à 00:20:07
ParadoX a écrit : ça change quoi, techniquement ? |
plein, beaucoup. char *, c'est une machination de satan. tu fais une copie de la chaine dans ta classe ou tu te contente de stocker lepointeur que tu recois ?
Marsh Posté le 27-02-2006 à 00:21:11
ParadoX a écrit : ça change quoi, techniquement ? |
ben ta classe est buggée car tu n'a pas rédéfini de comportement pour la copie
Marsh Posté le 27-02-2006 à 00:21:49
skelter a écrit : ben ta classe est buggée car tu n'a pas rédéfini de comportement pour la copie |
ah ouais, en plus, j'avais meme pas fait gaffe
Marsh Posté le 27-02-2006 à 00:22:33
Code :
|
C'est ça que vous voulez savoir ?
Vous me parlez en chinois, actuellement
N'oubliez pas que je débute
Marsh Posté le 27-02-2006 à 00:24:03
ParadoX a écrit :
|
ouais, donc ca, c'est satan
exemple rigolo
Code :
|
Marsh Posté le 27-02-2006 à 00:24:30
ParadoX a écrit :
|
de mieux en mieux, serieux utilises std::string, ton prof il avais qu'a vous expliquer tout ca
Marsh Posté le 27-02-2006 à 00:25:16
skelter a écrit : de mieux en mieux, serieux utilises std::string, ton prof il avais qu'a vous expliquer tout ca |
bin le prof il a pas exactement l'air au top
Marsh Posté le 27-02-2006 à 00:26:04
ouai, les char * c'est magique
Marsh Posté le 27-02-2006 à 00:26:58
skelter a écrit : les char * c'est magique |
-Bonjour, je veux un programme qui leaks plein pot et qui risque de planter sur des conneries, vous avez une solution a me proposer ?
-char * !
-merci !
Marsh Posté le 27-02-2006 à 00:27:09
Hm on m'a toujours appris comme ça (en cours de C systeme ), et la c'était le seul moyen que je voyais sans utiliser String.
M'enfin si c'est si dangereux, pourquoi ma Liste marche sans problèmes avec tous les objets, et tout ? ^^
Pour corriger, il faudrait que je passe en String ? Rien d'autre à faire avec char ?
Marsh Posté le 27-02-2006 à 00:28:46
ParadoX a écrit : Hm on m'a toujours appris comme ça (en cours de C systeme ), et la c'était le seul moyen que je voyais sans utiliser String. |
parce que c'est dangeureux. Pas forcement fatal. Sur tes 19lignes de code, ca va, mais sur un truc plus gros tu risques gros (sauf si vraiment tu sais ce que tu fais). Donc plutot que de se faire chier on utilise std::string, ce qui evite pas mal de crise de nerfs
ParadoX a écrit : |
Tes variables membre deviennet std::string
et quand en parametre de fonctions tu prenait avant un char * maintenant tu prends un const std::string &
Marsh Posté le 27-02-2006 à 00:34:52
Merci !
J'ai mailé mon prof en précisant ton exemple (:D), et je lui ai demandé pour les Strings. Bref, fini pour ce soir, demain, je continue à vous embêter
Marsh Posté le 27-02-2006 à 08:50:44
chrisbk a écrit : ué. ce qui est surtout clair c'est que tu fais du boulot pas du tout au bon endroit. C'est pas a la liste de savoir comment afficher un objet, mais a un objet de s'avoir s'afficher |
Et si on inverse les dépendances pour que l'objet ne gère pas lui même son affichage (après tout, l'affichage est une fonction informatique et non un objet métier) ?
Peut-on associer un objet "renderer" responsable de l'affichage de l'objet ? Chaque renderer traitera un objet ou un famille d'objet (ex: carré, rectangle, losange... sont des parallelogrammes).
Marsh Posté le 27-02-2006 à 09:57:06
La réponse du prof:
Citation : Bonjour,
|
Bref, jremets mes char *, ou jpeux faire quoi avec le String.h ?
Marsh Posté le 26-02-2006 à 22:56:07
Bonjour,
Toujours dans le cadre de ce projet C++ pour la fac, je rebloque
J'ai besoin de déterminer de quel "type" un objet est ... en gros, j'ai ceci
Class Objet
Classe Forme : public Objet
Class Groupe : public Objet
Maintenant, j'ai un objet en paramètre, et dans un If je voudrais tester s'il s'agit d'un Groupe ou d'une Forme. Y-a-t'il une solution plus pratique que d'ajouter une donnée membre dans la classe Objet qui indiquerait le type ?
Merci
---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt