Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1825 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°1314925
slash33
Posté le 27-02-2006 à 23:35:53  profilanswer
 

Reprise du message précédent :

ParadoX a écrit :

J'ai rien dit, jsuis trop con :o


Combien de fois s'est on dit ça... à propos de nous mêmes ?  :whistle:

mood
Publicité
Posté le 27-02-2006 à 23:35:53  profilanswer
 

n°1314928
ParadoX
Posté le 27-02-2006 à 23:36:29  profilanswer
 

slash33 a écrit :

Combien de fois s'est on dit ça... à propos de nous mêmes ?  :whistle:


 
Moquez-vous, moquez-vous seulement :o [:thalis]


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314930
slash33
Posté le 27-02-2006 à 23:37:50  profilanswer
 

Heu je parle de nous pas de toi.
 
Pour ton problème les opérateurs ne s'héritent pas et j'aime pas la signature de ton opérateur

n°1314932
ParadoX
Posté le 27-02-2006 à 23:39:21  profilanswer
 

slash33 a écrit :

Heu je parle de nous pas de toi.


 
Je plaisantais :D
 

slash33 a écrit :

Pour ton problème les opérateurs ne s'héritent pas et j'aime pas la signature de ton opérateur


 
La signature ? :sweat:  
et comment je fais pour faire marcher l'opérateur dans toutes les formes ? Jrecopie le code partout ?  [:mlc]

Message cité 1 fois
Message édité par ParadoX le 27-02-2006 à 23:39:29

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

bah y'a un truc qui s'apelle google, ca marche pas mal
 
http://gethelp.devx.com/techtips/c [...] in0400.asp

n°1314937
chrisbk
-
Posté le 27-02-2006 à 23:42:41  profilanswer
 

ParadoX a écrit :


et comment je fais pour faire marcher l'opérateur dans toutes les formes ? Jrecopie le code partout ?  [:mlc]


 
rien n'empeche ta surcharge de << de rapeller une fonction virtuelle

n°1314938
slash33
Posté le 27-02-2006 à 23:42:51  profilanswer
 

Bon je suis pas spécialiste C++ mais je crois qu'il te faut un opérateur

Code :
  1. void coordonnee ::operator<<(ostream& s) const


 
Edit : Mouais bon c'est pas ça mais ça

Code :
  1. ostream& operator << (ostream& os, const coordonnee& s);


Message édité par slash33 le 27-02-2006 à 23:44:36
n°1314940
ParadoX
Posté le 27-02-2006 à 23:47:55  profilanswer
 

bah j'ai ça dans le .h
 

Code :
  1. ostream& operator << (ostream&, const coordonnee) const;


 
mais il me dit "binary 'operator <<' has too many parameters"
 
Pourquoi le & après le coord ?  


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

paske c'est comme ca [:el g] C'est un passage par référence qu'il faut. Maintenant reflechis un brin [:dawao] Si c'est une fonction memebre, tout ce dont tu as besoin c'est du flux de sortie dans lequel tu vas ecrire...

n°1314944
ParadoX
Posté le 27-02-2006 à 23:50:38  profilanswer
 

ah ok :)
 
Et comment je couple ça à une méthode virtuelle ?


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

n°1314948
slash33
Posté le 27-02-2006 à 23:55:51  profilanswer
 

Dis chrisbk elle fonctionne ma première solution ?

Code :
  1. void coordonnee ::operator<<(ostream& s) const


 
Edit : heu à y réfléchir ça donne un emploi de ce genre

Code :
  1. coordonnee uneCoord (0, 0);
  2. uneCoord << cout; // !!!


 
 :(


Message édité par slash33 le 27-02-2006 à 23:58:44
n°1314951
chrisbk
-
Posté le 27-02-2006 à 23:57:31  profilanswer
 

ParadoX a écrit :

ah ok :)
 
Et comment je couple ça à une méthode virtuelle ?


 
 
[:pingouino][:pingouino][:pingouino][:pingouino][:pingouino]

n°1314952
ParadoX
Posté le 27-02-2006 à 23:58:14  profilanswer
 

J'ai ça maintenant:
.h

Code :
  1. ostream& operator << (const coordonnee& ) const;


 
.cpp

Code :
  1. ostream& Objet::operator << (const coordonnee &maCoord) const
  2. {
  3. return cout << "(" << maCoord.x << "," << maCoord.y << " )";
  4. }


 
C'est malpropre, le return cout ? c'est satan, comme le char* ? :sweat:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314953
ParadoX
Posté le 27-02-2006 à 23:58:52  profilanswer
 


 
Une surcharge d'opérateur peut-elle être virtuelle ? :heink:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314957
chrisbk
-
Posté le 28-02-2006 à 00:02:01  profilanswer
 

ParadoX a écrit :

Une surcharge d'opérateur peut-elle être virtuelle ? :heink:


 
nan, mais

Code :
  1. struct bidule
  2. {
  3.     int x;
  4.     virtual void roger() { .. }
  5. };
  6. std::ostream & operator << (std::ostream &o, const bidule &b)
  7. {
  8.     return o;
  9. }


 
dans la surcharge tu fous ce que tu veux hein ? genre b.roger(); ou ske tu veux

n°1314959
slash33
Posté le 28-02-2006 à 00:05:14  profilanswer
 

Heu la bonne signature c'est celle-ci:

Code :
  1. ostream& operator << (ostream& os, const coordonnee& s);


 
Ca permet de définir un opérateur (non membre d'une classe) qui accepte à gauche une référence sur un ostream et à droite une référence sur un coordonnee constant. La fonction retourne une référence sur le ostream pour permettre l'enchaînement de l'opérateur (cout << "Coord 1=" << coord1 << "Coord 2=" << coord2). Rien de sorcier à part la signature elle-même de l'opérateur.

n°1314961
ParadoX
Posté le 28-02-2006 à 00:07:31  profilanswer
 

slash33 a écrit :

Heu la bonne signature c'est celle-ci:

Code :
  1. ostream& operator << (ostream& os, const coordonnee& s);


 
Ca permet de définir un opérateur (non membre d'une classe) qui accepte à gauche une référence sur un ostream et à droite une référence sur un coordonnee constant. La fonction retourne une référence sur le ostream pour permettre l'enchaînement de l'opérateur (cout << "Coord 1=" << coord1 << "Coord 2=" << coord2). Rien de sorcier à part la signature elle-même de l'opérateur.


 
Bah la il me resors "error C2804: binary 'operator <<' has too many parameters" :(
Et pour le coup du virtual, j'ai pas compris  :(  
 


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314963
slash33
Posté le 28-02-2006 à 00:08:08  profilanswer
 

Tu as bien sorti la déclaration du corps de la classe ?

n°1314965
ParadoX
Posté le 28-02-2006 à 00:09:22  profilanswer
 

slash33 a écrit :

Tu as bien sorti la déclaration du corps de la classe ?


 
Ah non, il est dans la classe Objet !
 

Code :
  1. //Structure définissant une coordonnée, utilisée pour définir toutes nos formes.
  2. struct coordonnee
  3. {
  4. double x;
  5. double y;
  6. };
  7. //"Super-classe" Objet, qui est l'élément de base du projet
  8. class Objet
  9. {
  10. friend class Liste;
  11. friend class Groupe;
  12. friend class Iterateur_w;
  13. protected:
  14.  char *nom;
  15.  bool estLibre;
  16. public:
  17.  Objet();
  18.  Objet(char *nom);
  19.  ~Objet();
  20.  virtual void Print(Formater& ) const;
  21.  virtual void Print() const;
  22.  ostream& operator << (ostream&, const coordonnee& ) const;
  23. };


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314966
skelter
Posté le 28-02-2006 à 00:09:29  profilanswer
 

non mais c'est sur que si tu le declare dans ta classe ca fais 3 opérande avec this... faut foutre ca en dehors de cla classe comme dans l'exemple de chrisbk

n°1314967
slash33
Posté le 28-02-2006 à 00:12:24  profilanswer
 

Il faudra peut être le déclarer friend ?

n°1314968
ParadoX
Posté le 28-02-2006 à 00:13:20  profilanswer
 

maintenant il me dit "modifiers not allowed on nonmember functions" :|
 
Pourtant, en cours, on avait mit la surcharge des operateurs DANS la classe, ds la partie public !
 
Ah, alors attds ^^


Message édité par ParadoX le 28-02-2006 à 00:14:04

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314969
skelter
Posté le 28-02-2006 à 00:14:44  profilanswer
 

vir le const sur this

n°1314971
ParadoX
Posté le 28-02-2006 à 00:18:03  profilanswer
 


Ok j'ai ça DANS la classe:
 

Code :
  1. friend ostream& operator << (ostream&, const coordonnee& );


 
Par contre, c'est dans l'implémentation ou il est pas content maintenant:
 

Code :
  1. ostream& Objet::operator << (ostream &os, const coordonnee &maCoord)
  2. {
  3. return cout << "(" << maCoord.x << "," << maCoord.y << " )";
  4. }


 
--> error C2039: '<<' : is not a member of 'Objet'


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1314972
ParadoX
Posté le 28-02-2006 à 00:19:12  profilanswer
 

Ok corrigé, j'ai viré le "Objet::" !
 
EDIT: Et ça marche avec mon Triangle !! ça s'est hérité, on dirait :o :D


Message édité par ParadoX le 28-02-2006 à 00:19:52

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1315019
slash33
Posté le 28-02-2006 à 08:56:35  profilanswer
 

Il a pas hérité grand chose puisque ce n'est pas une méthode de la classe Objet...

Message cité 1 fois
Message édité par slash33 le 28-02-2006 à 08:57:17
n°1315188
ParadoX
Posté le 28-02-2006 à 11:58:43  profilanswer
 

slash33 a écrit :

Il a pas hérité grand chose puisque ce n'est pas une méthode de la classe Objet...


 
Pourtant il est dedans
 

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.  virtual void Print(Formater& ) const;
  14.  virtual void Print() const;
  15.  friend ostream& operator << (ostream&, const coordonnee& );
  16.  friend coordonnee operator >> (istream&, coordonnee& );
  17. };


 
[:spamafote]


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

mékésséksa ? [:le kneu]

n°1315192
ParadoX
Posté le 28-02-2006 à 12:01:43  profilanswer
 

:??: En cours, on a fait comme ça :o


Message édité par ParadoX le 28-02-2006 à 12:02:03

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

mais pourquoi ton operateur << de Objet prends une coordonnée en entrée ?

n°1315196
chrisbk
-
Posté le 28-02-2006 à 12:03:09  profilanswer
 

et vire moi ces friends, ca me fait soucis [:le kneu]

n°1315197
ParadoX
Posté le 28-02-2006 à 12:03:33  profilanswer
 

chrisbk a écrit :

mais pourquoi ton operateur << de Objet prends une coordonnée en entrée ?


 
Ce qui est entre ( ), c'est ce que la fonction ne prends qu'en entrée ? :??:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1315198
ParadoX
Posté le 28-02-2006 à 12:04:58  profilanswer
 

chrisbk a écrit :

et vire moi ces friends, ca me fait soucis [:le kneu]


 
Bah oui mais l'itérateur doit pouvoir modifier les données membres, ainsi que la liste (pour les afficher), et le groupe aussi
Si j'en vire un des 3, j'ai tjrs droit à "cannot access protected member declared in class 'Objet'"

Message cité 1 fois
Message édité par ParadoX le 28-02-2006 à 12:05:51

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1315202
skelter
Posté le 28-02-2006 à 12:06:57  profilanswer
 

c'est ton prof qui t'a enseigner le concept d'itérateur ?

n°1315205
chrisbk
-
Posté le 28-02-2006 à 12:07:14  profilanswer
 

ParadoX a écrit :

Bah oui mais l'itérateur doit pouvoir modifier les données membres


 
Non
 

Citation :

ainsi que la liste (pour les afficher)


 
toujours pas
 

Citation :

, et le groupe aussi


 
pas plus
 

ParadoX a écrit :


Si j'en vire un des 3, j'ai tjrs droit à "cannot access protected member declared in class 'Objet'"


 
désign foireux. sinon colle tout en public et on en parle pu hein ?

n°1315209
ParadoX
Posté le 28-02-2006 à 12:08:18  profilanswer
 

skelter a écrit :

c'est ton prof qui t'a enseigner le concept d'itérateur ?


 
bah ... oui :D
 
Un iterateur de lecture, pour parcourir ma liste, et un interateur d'écriture, hérité de l'iterateur de base. Vous voulez la classe ? :D
 
(t'ain jai pas fini de me faire lyncher ici :sweat: )

Message cité 1 fois
Message édité par ParadoX le 28-02-2006 à 12:08:53

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1315213
chrisbk
-
Posté le 28-02-2006 à 12:09:21  profilanswer
 

Nan mais Objet, si je comprends, c'est la base de tes groupes, triangle et cie non ? Liste n'a rien, mais alors rien a voir la dedans.

n°1315224
skelter
Posté le 28-02-2006 à 12:20:27  profilanswer
 

ParadoX a écrit :

bah ... oui :D
 
Un iterateur de lecture, pour parcourir ma liste, et un interateur d'écriture, hérité de l'iterateur de base. Vous voulez la classe ? :D
 
(t'ain jai pas fini de me faire lyncher ici :sweat: )


 
non mais le plus important c'est que c'est le conteneur qui fournit les itérateurs (types et méthodes d'initialisations) permettant de manipuler ses élément (pas besoin de violler l'encapsulation), dans ton cas tes types itérateurs semblent etre indépendant et c'est l'appelant qui doit les initialiser

n°1315228
ParadoX
Posté le 28-02-2006 à 12:22:14  profilanswer
 


Fait à l'arrache:
 
http://orgasm.free.fr/hfr/planc++.jpg
 
Maintenant, dans la liste, j'ai des fonctions comme
 

Code :
  1. // Valeur de la tête
  2. Objet Liste::valeurTete() const
  3. {
  4. if(!estVide())
  5.  return tete->valeur->nom;
  6. else
  7.  throw -1;
  8. }


 
Et j'ai du coup, j'ai besoin du friend.
 
Pareil pour Groupe:
 

Code :
  1. // Ajout d'un objet dans un groupe
  2. bool Groupe::ajout(Objet *monObjet)
  3. {
  4. if(monObjet->estLibre)
  5. {
  6.  monObjet->estLibre = false;
  7.  this->monGroupe.ajoutFin(monObjet);
  8.  return true;
  9. }
  10. else
  11. {
  12.  return false;
  13. }
  14. }


 
le monObjet->estLibre est un bool protected de Objet.
 
et ainsi de suite pour les autres classes !


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

Il faut que je fasse des Get- et Set() pour toutes les données membres, sinon ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1315231
chrisbk
-
Posté le 28-02-2006 à 12:24:29  profilanswer
 

ParadoX a écrit :


Et j'ai du coup, j'ai besoin du friend.


 
Non, tu fais un accesseur sur nom
 

Citation :

le monObjet->estLibre est un bool protected de Objet.


 
y sert a quo ce boolean ? au pire fait un seteur
 

ParadoX a écrit :


et ainsi de suite pour les autres classes !


 
design foireux on te dit.

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