Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2569 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5
Auteur Sujet :

[C++ débutant] Tester si un Objet est d'un type précis ?

n°1314050
ParadoX
Posté le 27-02-2006 à 09:57:06  profilanswer
 

Reprise du message précédent :
La réponse du prof:
 

Citation :

Bonjour,
 
Les rumeurs... Je maintiens le même discours que lorsque j'ai donné le
projet: seule la librairie standard C <string.h> est autorisée (standard C
veut bien dire ce que cela veut dire). Seules les fonctions C sont
utilisables mais par la classe string.
 

Citation :

// Début du Code
    char * bidule = strdup("lalaloyogo" );
    Objet machin(bidule);
    free(bidule);    
    //Ici machin continue a stocker un pointeur vers un truc qui pointe plus
vers rien. Emmerde en vue, capitaine ...
 
// Fin du Code


 
Pour ce code tout dépend ce que vous faites dans le constructeur:
personnellement dans le constructeur d'Objet je dupliquerais l'info bidule
donc cela ne serait pas dangereux. Mais cela dépend des cas, parfois c'est
bien de dupliquer mais parfois non (perte de vitesse). Aussi veillez à bien
documenter vos méthodes pour que l'appelant sache s'il peut libérer ou non
après l'appel.
 
Cordialement,


 
Bref, jremets mes char *, ou jpeux faire quoi avec le String.h ? :sweat:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
mood
Publicité
Posté le 27-02-2006 à 09:57:06  profilanswer
 

n°1314061
chrisbk
-
Posté le 27-02-2006 à 10:12:13  profilanswer
 

ParadoX a écrit :

Seules les fonctions C sont
utilisables mais par la classe string.


 
bah tu vois il le dit lui meme : fonctions C
Donc faut savoir : on fait du C, ou du C++ ?
 
 

Citation :

Pour ce code tout dépend ce que vous faites dans le constructeur:
personnellement dans le constructeur d'Objet je dupliquerais l'info bidule
donc cela ne serait pas dangereux.


 
oué, evidemment. Vu qu'en C on s'en sort, en c++ aussi...mais en utilisant des fonctions C
Donc tjs le meme pb : on fait quoi ? du C ou du C++ ?
 
 

ParadoX a écrit :


Bref, jremets mes char *, ou jpeux faire quoi avec le String.h ? :sweat:


 
string.h c'est des fonctions de manipulations de char * [:pingouino]
 
 
 
 

n°1314064
ParadoX
Posté le 27-02-2006 à 10:15:51  profilanswer
 

Bah oui mais qu'est ce que tu veux que je te dise :sweat:  
Jpréfere rester dans le cadre du projet, et m'en tenir à l'énoncé pour ne pas perdre de points ... pourtant il a insisté sur l'aspect Objet du tout, donc c'est bien C++ ^^
 
Bref, merci quand même pour les strings :)
 
Pour le Print() en virtual, je le mets dans la classe Objet, puis je le redéfinis et dans Groupe et dans Forme ?
Puis le Print() de la Liste cette fois appellera à tour de role le print() de chaque objet dans cette liste ?
 
 :jap:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314069
chrisbk
-
Posté le 27-02-2006 à 10:17:52  profilanswer
 

ParadoX a écrit :

Bah oui mais qu'est ce que tu veux que je te dise :sweat:  
Jpréfere rester dans le cadre du projet, et m'en tenir à l'énoncé pour ne pas perdre de points ... pourtant il a insisté sur l'aspect Objet du tout, donc c'est bien C++ ^^


 
bin jveux pas etre mechant, mais j'ai l'impression qu'il vous apprends du mauvais C++, du C++ tout laid, un croisement C/C++ qu'on voit un peu trop souvent; malheureusement
 

Citation :

Bref, merci quand même pour les strings :)


 
bin maintenant, faut faire avec. Faut apprendre a gerer correctement les char * pour eviter de partir dans le décor [:pingouino]
 
 
 
 

ParadoX a écrit :


Pour le Print() en virtual, je le mets dans la classe Objet, puis je le redéfinis et dans Groupe et dans Forme ?
Puis le Print() de la Liste cette fois appellera à tour de role le print() de chaque objet dans cette liste ?
 
 :jap:


 
ouais, en gros, ouais
 

n°1314121
ParadoX
Posté le 27-02-2006 à 10:58:04  profilanswer
 

Hm quand je rajoute un print virtual dans l'objet, il gueule  
 

Citation :

forme.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Objet::print(void)const " (?print@Objet@@UBEXXZ)


 
... pour chaque classe. Il faut que je le redéfinisse pour chaque Objet ?  [:mlc] Je n'ai besoin que de le faire dans GROUPE et FORME, mais pas dans triangle etc ... comment faire ?
 
J'ai ajouté
 

Code :
  1. virtual void print() const;


 
dans Objet.h ... maintenant, faut-il que je l'implémente dans Objet.cpp ? Et quand je l'implémente dans Forme par ex, faut-il que je l'appelle comme ça:
 

Code :
  1. void Objet::Print() const


ou bien

Code :
  1. void Forme::Print() const


?
 
 :sweat:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314129
chrisbk
-
Posté le 27-02-2006 à 11:01:55  profilanswer
 

t'as pas fini d'avoir mal aux fesses toi :d
 

Code :
  1. class Objet
  2. {
  3. virtual void Print() const { //affiche des conneries. Ca peut aussi aller dans le .cpp hein ?
  4. }
  5. }
  6. class Groupe : Objet
  7. {
  8. virtual void Print() const { //affiche d'autre connerie
  9. }
  10. }


 
enfin c'est comme pour toutes les autres fonctions, sinon
 
 
 

n°1314130
ParadoX
Posté le 27-02-2006 à 11:03:22  profilanswer
 

C'est pas ce que je voulais dire, mais tu m'as répondu quand même :D
'vais tester tout ça, moi :o


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314163
ParadoX
Posté le 27-02-2006 à 11:24:27  profilanswer
 

ça marche pas  :cry:  
 
Bien qu'ayant redéfini un print pour un GROUPE et pour une FORME, quand j'appelle le Print(), il me print tout le temps celui de OBJET !
 

Code :
  1. class Objet
  2. {
  3. friend class Liste;
  4. friend class Groupe;
  5. friend class Iterateur_w;
  6. protected:
  7.  char *nom;
  8.  bool estLibre;
  9. public:
  10.  Objet();
  11.  Objet(char *nom);
  12.  ~Objet();
  13.  void printNom() const;
  14.  virtual void print() const;    // --> cout << "Ceci est un Objet" << endl;
  15. };


 
 

Code :
  1. class Forme : public Objet
  2. {
  3. private :
  4.  char *type;
  5.  unsigned int couleur;
  6. public :
  7. Forme(char*, char*, unsigned int);
  8. virtual void print() const;     // --> cout << "Ceci est une Forme" << endl;
  9. };


 
 

Code :
  1. class Groupe : public Objet
  2. {
  3. friend void main();
  4. private:
  5.  Liste monGroupe;
  6. public:
  7.  Groupe(char *nom);
  8.  bool ajout(Objet& );
  9.  bool supprimer(Objet& );
  10.  void vider();
  11.  virtual void Print() const;    // --> cout << "Ceci est un Groupe" << endl;
  12. };


 
Pourquoi ne fait-il pas la différence ?
Si je teste a la main le print sur un triangle, ça marche et il m'affiche que c'est une FORME. Si en revanche je teste a la main sur un groupe, genre monGroupe.print(); bah ... il prends le print() de Objet :(
 
Enfin, dans la liste complete, il me dit que TOUT est un objet :/


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314176
chrisbk
-
Posté le 27-02-2006 à 11:35:10  profilanswer
 

mais ouais, parce que dans tes noeuds tu stockes des objets, on te l'a dit hier [:dawao]
 
Y'a une difference fondamentale (pour le polymorphisme) entre :
 
Objet bidule;
Objet *bidule;
 
dans le premier cas ton truc est forcement un "Objet", et si tu ecris
 
Groupe toto;
Objet a = toto;  
 
seule la partie 'Objet' de toto sera recopié dans 'a'. Le reste non.
 
Si tu ecris
 
Groupe *toto = new Groupe();
Objet *a = toto;  
 
la 'a' continue de pointer vers un 'Groupe', meme si on n'en voit que la partie Objet. Fais toi un prog de test, joue avec ca et a la longue tu pigeras [:el g]
 
 
 
 
 

n°1314178
chrisbk
-
Posté le 27-02-2006 à 11:36:31  profilanswer
 

et c'est quoi tout ces friends ? [:le kneu] t'as eu des coupons de reductions ? :d

mood
Publicité
Posté le 27-02-2006 à 11:36:31  profilanswer
 

n°1314181
ParadoX
Posté le 27-02-2006 à 11:38:43  profilanswer
 

Jpensais que le coup des méthodes virtuelles allait résoudre le pb :o  
 
Bon, je me fais chier pendant 3 heures à passer d'une liste d'Objets à une liste d'*Objets ? :sweat:  :sweat:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314185
chrisbk
-
Posté le 27-02-2006 à 11:39:33  profilanswer
 

ParadoX a écrit :

Jpensais que le coup des méthodes virtuelles allait résoudre le pb :o  


nan mais c'est pas festival jeanlouis le c++ [:dawao]
 

ParadoX a écrit :


Bon, je me fais chier pendant 3 heures à passer d'une liste d'Objets à une liste d'*Objets ? :sweat:  :sweat:


 
Heuh si ca te prends 3h pour faire ca, c'est que t'as un serieux pb :d

n°1314186
ParadoX
Posté le 27-02-2006 à 11:39:34  profilanswer
 

chrisbk a écrit :

et c'est quoi tout ces friends ? [:le kneu] t'as eu des coupons de reductions ? :d


 
 [:ddr555]  
C'était pour (l'ancien) print, ou encore pour l'itérateur :o


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314189
ParadoX
Posté le 27-02-2006 à 11:40:29  profilanswer
 

chrisbk a écrit :

nan mais c'est pas festival jeanlouis le c++ [:dawao]
 
 
 
Heuh si ca te prends 3h pour faire ca, c'est que t'as un serieux pb :d


 
J'ai dit ça au pif, m'enfin avec toutes les méthodes d'ajout, de suppression, pis les itérateurs :/
je Hais la prog :kaola:  [:thalis]


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314192
chrisbk
-
Posté le 27-02-2006 à 11:42:21  profilanswer
 

ParadoX a écrit :

J'ai dit ça au pif, m'enfin avec toutes les méthodes d'ajout, de suppression, pis les itérateurs :/
je Hais la prog :kaola:  [:thalis]


 
Mais non, enfin. C'est juste que les debuts font souvent mal au cul

n°1314193
ParadoX
Posté le 27-02-2006 à 11:44:33  profilanswer
 

Bon, jme lance...
 
quand j'ai des méthodes pareilles:
 

Code :
  1. void ajoutFin(Objet& );
  2. void ajoutTete(Objet& );


 
et que j'ai remplacé ma donnée membre Objet par *Objet, à quoi doit ressembler la signature des méthodes ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314195
chrisbk
-
Posté le 27-02-2006 à 11:45:23  profilanswer
 

Bin ... Objet * ?

n°1314197
ParadoX
Posté le 27-02-2006 à 11:46:25  profilanswer
 

(nan mais je sais, hein :o)
 
 
 
 
 
 
 
 
 
 
 
[:cupra]


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314204
skelter
Posté le 27-02-2006 à 11:56:13  profilanswer
 

tu sais qu'a force de coller des rustines sur ton code mal fichu ca risque de devenir une sacrée usine à gaz, c'est parfois bon (mais ca on n'a du mal à y croire quand on débute) de repensée les choses, refondre quoi

n°1314206
ParadoX
Posté le 27-02-2006 à 11:58:25  profilanswer
 

C'est plus des rustines, là, mais des échanges complets :D  
D'abord je fais marcher tout ça, puis ensuite on verra ... m'enfin c'est assez clair dans ma tête, c'est la partie Code qui me pose bcp de problèmes ! J'ai pas l'experience nécéssaire ... m'enfin on a tous commencé un jour :)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314224
ParadoX
Posté le 27-02-2006 à 12:24:32  profilanswer
 

Bon, ça marche avec les *Objet  :sol:  
 
Seul problème:  
 

Code :
  1. monTriangle->print(); // --> Ceci est une Forme --> Correct !
  2. groupe1->print(); // --> Ceci est un Objet ! --> Bah :/


 
Pourquoi il ne fait pas la différence ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314227
chrisbk
-
Posté le 27-02-2006 à 12:26:27  profilanswer
 

print est different de Print
(cf ton code)

n°1314229
ParadoX
Posté le 27-02-2006 à 12:28:59  profilanswer
 

Hmpf [:thalis]  
 
 
 
Mercii  :jap:  :jap:  :jap:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314230
ParadoX
Posté le 27-02-2006 à 12:32:21  profilanswer
 

http://orgasm.free.fr/hfr/c++.PNG
 
 :sol:  
 
 
Merci pour tout, je continue  :hello:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314270
slash33
Posté le 27-02-2006 à 13:27:44  profilanswer
 

Et demandes à ton prof où il a appris à coder C++ pour ne pas finir comme lui.  :D

n°1314325
ParadoX
Posté le 27-02-2006 à 14:09:55  profilanswer
 

:D  
 
 
Bon, j'en chie pour l'affichage "joli" :/
En fait, j'aurais tjrs besoin d'un truc qui m'indique de quel Type l'objet actuel est pour avancer (le Typeinfo me dit que tous les membres de ma liste sont des *Objet)  
 
J'aimerais faire un affichage de la sorte:
 
Liste (6 elements):
<=> Triangle
<=> Rond
<=> Groupe 1
      <=> Carre
      <=> Parallelogramme
<=> Groupe 2
      <=> Triangle 2
      <=> Parallelogramme2
<=> Groupe 3
      <=> Rond3
      <=> Groupe 4
            <=> Carre3
            <=> Triangle 3
      <=> Rond5
<=> Parallelogramme3
 
Bref, vous l'aurez compris, à chaque Groupe, je veux un Tab ... a la main, j'ai réussi à le faire pour un niveau, mais pas pour n niveaux ... car je ne sais pas combien il y en ... des idées ? :D


Message édité par ParadoX le 27-02-2006 à 14:10:11

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314329
chrisbk
-
Posté le 27-02-2006 à 14:11:59  profilanswer
 

ecrit pas directement sur cout, fais une surcouche a ostream (genre monFormater ou je sais pas quoi), avec des methodes incrementeIndentation et decrementeIndentation qui fera ca pour toi. ou un truc du genre.

n°1314346
ParadoX
Posté le 27-02-2006 à 14:24:35  profilanswer
 

Ouais mais il faut quand meme que je détecte quand j'ai affaire à un groupe, non ? :heink:  
Jvais tenter ça cet aprem, j'ai une idée :)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314350
chrisbk
-
Posté le 27-02-2006 à 14:26:19  profilanswer
 

ParadoX a écrit :

Ouais mais il faut quand meme que je détecte quand j'ai affaire à un groupe, non ? :heink:  
Jvais tenter ça cet aprem, j'ai une idée :)


 
Nan. c'est "groupe" qui se dessinera proprement et zou

n°1314371
Joel F
Real men use unique_ptr
Posté le 27-02-2006 à 14:45:28  profilanswer
 

mouais sinon pense à changer d'école. Ton prof est incompétent

n°1314373
skelter
Posté le 27-02-2006 à 14:47:01  profilanswer
 

ouai
ParadoX > t'es sur d'avoir compris le polymorphisme d'inclusion ?

n°1314377
chrisbk
-
Posté le 27-02-2006 à 14:48:10  profilanswer
 

(revoir un VS6 apres toutes ces années, ca fait peur)

n°1314383
slash33
Posté le 27-02-2006 à 14:52:31  profilanswer
 

chrisbk a écrit :

(revoir un VS6 apres toutes ces années, ca fait peur)


Ca fait 5 ans que je le vois moi VS6  :o

n°1314436
ParadoX
Posté le 27-02-2006 à 15:33:22  profilanswer
 

skelter a écrit :

ouai
ParadoX > t'es sur d'avoir compris le polymorphisme d'inclusion ?


 
d'inclusion ? [:mlc]  :??:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314481
skelter
Posté le 27-02-2006 à 15:58:59  profilanswer
 

t'arretes pas de nous demander comment on détermine le typage dynamique d'un pointeur sur objet (enfin toi tu a l'air de manipuler des valeurs, ca pause deja un probleme) alors que tu n'en as pas besoin et le polymorphisme par le biai des méthodes virtuelles dans ta hierarchie de classe est la methode propre (on te l'as dit plusieurs fois)
 
regarde le paragraphe sur le polymorphisme par sous-typage, c'est assez claire je penses
http://fr.wikipedia.org/wiki/Polymorphisme

n°1314487
ParadoX
Posté le 27-02-2006 à 16:02:45  profilanswer
 

Nan ça je l'ai bien compris quand j'ai fait le print() pour chaque classe dérivée !  :)
Ceci dit, je galère quand même à faire un affichage correct


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314495
ParadoX
Posté le 27-02-2006 à 16:09:43  profilanswer
 

chrisbk a écrit :

ecrit pas directement sur cout, fais une surcouche a ostream (genre monFormater ou je sais pas quoi), avec des methodes incrementeIndentation et decrementeIndentation qui fera ca pour toi. ou un truc du genre.


 
Bon, si à un moment tu as du temps libre en trop, quelques indices pour réaliser cela seraient les bienvenus ! :)
 :sweat:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314499
chrisbk
-
Posté le 27-02-2006 à 16:13:51  profilanswer
 

ParadoX a écrit :

Bon, si à un moment tu as du temps libre en trop, quelques indices pour réaliser cela seraient les bienvenus ! :)
 :sweat:


 
bon, je torche ici meme, ptet ca compile, ptet ca compile pas.
 

Code :
  1. class Formater
  2. {
  3. public:
  4.   Formater(std::ostream &out);
  5.   void incrementeIndentation();
  6.   void decrementeIndentation();
  7.   void afficheNiaserie(const std::string & );
  8. private:
  9.   std::ostream &out;
  10.   int niveauIndentation
  11. }
  12. Formater::Formater(std::ostream &pOut) : out(pOut), niveauIndentation(0) {};
  13. void Formater::incrementeIndentation()
  14. {
  15. niveauIndentation++;
  16. }
  17. void Formater::decrementeIndentation()
  18. {
  19. niveauIndentation--;
  20. }
  21. void afficheNiaserie(const std::string &truc)
  22. {
  23. for (int i=0;i<niveauIndentation;i++)
  24.    out << '\t';
  25. out << truc,
  26. }


 
Apres tu vois. ton objet::Print peut par exemple prendre un Formater & en parametre, l'utiliser pour faire ses ecritures et zou
 
(j'ai bien dit que j'avais torché hein ? [:petrus75])

n°1314502
ParadoX
Posté le 27-02-2006 à 16:16:59  profilanswer
 

Hm mais ça utilise des std :/
J'imagine que ce n'est pas inclus dans string.h ^^
 
Pourquoi en faire une classe entière ? C'est faisable sans les std:: ? :)
 
Merci [:ddr555]


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314503
chrisbk
-
Posté le 27-02-2006 à 16:17:53  profilanswer
 

nan mais hé, std::ostream tu y as droit [:dawao] (vu que tu inclues iostream) apres pour faire plaisir a ton retrograde prof C tu peux remplacer std::string  par char *, ca ira aussi


Message édité par chrisbk le 27-02-2006 à 16:19:05
n°1314521
skelter
Posté le 27-02-2006 à 16:25:18  profilanswer
 

le prof connai pas iostream, il connais que iostream.h et string.h

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5

Aller à :
Ajouter une réponse
 

Sujets relatifs
ereg et donnée type coordonnées[debutant C++] [Urgent] Tableau 2D nombre de colonne inconnu
[débutant] char* + char* = concaténertester l'existence d'une réalisation d'une méthode 'pure virtual'
le type autoincremente sous sql 2000server????[URGENT] [C++ débutant] problème avec tableau a plusieurs dimensions
type date et autoincrementer ss sql server 2000[VBScript] tester un CRC d'un fichier VBS éxécuté
[!PERL] recuperation de données (pour débutant)[C++ débutant] Différence entre un New et un "Type nom" ?
Plus de sujets relatifs à : [C++ débutant] Tester si un Objet est d'un type précis ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR