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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Classes polymères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Classes polymères

n°1331590
nargy
Posté le 24-03-2006 à 11:45:09  profilanswer
 

Compilé avec g++:

Code :
  1. #include <iostream.h>
  2. // classe polymère parente
  3. class Objet
  4. {
  5.   const char* monnom;
  6.   virtual void maClasse() { cout<<"Objet"<<endl; }
  7.   protected:
  8.   Objet& operator=(const Objet& o)
  9.   { *((char**)this)=*((char**)&o); return *this; }
  10.   public:
  11.   Objet(const char* nom): monnom(nom) {}
  12.   void quiSuisJe() { cout<<"Mon nom est "<<monnom<<", je suis un "; maClasse(); }
  13. };
  14. // deux classes polymères filles
  15. class ObjetA; class ObjetB;
  16. // classe polymère A
  17. class ObjetA: public Objet
  18. {
  19.   void maClasse() { cout<<"ObjetA"<<endl; }
  20.   public:
  21.   ObjetA(const char* nom): Objet(nom) {}
  22.   ObjetA& operator=(const ObjetB& b)
  23.   { Objet::operator=((Objet& )b); return *this; }
  24. };
  25. // classe polymère B
  26. class ObjetB: public Objet
  27. {
  28.   void maClasse() { cout<<"ObjetB"<<endl; }
  29.   public:
  30.   ObjetB(const char* nom): Objet(nom) {}
  31.   ObjetB& operator=(const ObjetA& a)
  32.   { Objet::operator=((Objet& )a); return *this; }
  33. };
  34. int main()
  35. {
  36.   ObjetA a("A" );
  37.   a.quiSuisJe();
  38.   ObjetB b("B" );
  39.   a=b;
  40.   a.quiSuisJe();
  41.   return 0+0==0;
  42. }


Cliquer dans le cadre blanc pour voir le résutat:

Spoiler :

Mon nom est A, je suis un ObjetA
Mon nom est A, je suis un ObjetB

:pt1cable: + :pt1cable: = :pt1cable:

mood
Publicité
Posté le 24-03-2006 à 11:45:09  profilanswer
 

n°1331606
skelter
Posté le 24-03-2006 à 11:56:48  profilanswer
 

et ?
 
ce genre d'écriture

Code :
  1. *((char**)this)=*((char**)&o)


en plus d'etre illisible c'est pas tres malin pour la protablilité, et c'est une classe d'objets polymorphiques, tu pourrais écraser  l'adresse de la vtable

n°1331607
nargy
Posté le 24-03-2006 à 11:58:18  profilanswer
 

Ben, ça marche très bien...

n°1331616
skelter
Posté le 24-03-2006 à 12:02:56  profilanswer
 

coup de chance
tu te rends compte que c'est unutile, dangereux et pas portable ?

n°1331619
nargy
Posté le 24-03-2006 à 12:04:55  profilanswer
 

heu, c est pour ça que j ai précisé que c était compilé avec g++. il ya des méthodes portables de faire ça?

n°1331623
skelter
Posté le 24-03-2006 à 12:08:44  profilanswer
 

monnom = o.monnom
 
on parles bien de la meme choses ?

n°1331625
nargy
Posté le 24-03-2006 à 12:12:59  profilanswer
 

> monnom = o.monnom
ça marche pas


Message édité par nargy le 24-03-2006 à 12:21:52
n°1331642
skelter
Posté le 24-03-2006 à 12:29:07  profilanswer
 

Code :
  1. Objet& operator=(const Objet& o)
  2. { monnom = o.monnom; return *this; }


 
ca marche
 
#include <iostream.h>
-->
#include <iostream>

n°1331644
nargy
Posté le 24-03-2006 à 12:37:10  profilanswer
 

non, ça compile pas:
polymere.cpp:6: error: `cout' undeclared (first use this function)
Je doit pas avoir une bonne installation des librairies.


Message édité par nargy le 24-03-2006 à 12:51:10
n°1331689
franceso
Posté le 24-03-2006 à 13:45:47  profilanswer
 

si tu fais #include <iostream.h>, tu peux utiliser tout ce que définit iostream (cin, cout, ...) directement.
 
Si tu fais #include <iostream>, tout ce que définit iostream est déclaré dans le namespace std. Du coup, il faut utiliser std::cout, std::cin, ... ou bien faire un "using namespace std"

mood
Publicité
Posté le 24-03-2006 à 13:45:47  profilanswer
 

n°1331700
chrisbk
-
Posté le 24-03-2006 à 13:56:56  profilanswer
 


Code :
  1. { *((char**)this)=*((char**)&o); return *this; }


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

n°1331702
chrisbk
-
Posté le 24-03-2006 à 13:57:52  profilanswer
 

bon pis les char *, poubelle

n°1331703
skelter
Posté le 24-03-2006 à 13:58:35  profilanswer
 

je viens de comprendres ce que tu fais, et c'est bien ce que je disais
 
avec ce code

Code :
  1. *((char**)this)=*((char**)&o);


tu affectes affectes la valeur du pointeur sur la vtable de this avec celle de o, ca explique l'affichage

Citation :


Mon nom est A, je suis un ObjetA
Mon nom est A, je suis un ObjetB --> le nom de a est toujours "A" mais l'appel de la methode virtuelle quiSuisJe passe par une indirection depuis la vtable de b


 
c'est quoi le but ?

n°1331704
chrisbk
-
Posté le 24-03-2006 à 13:58:42  profilanswer
 

Code :
  1. return 0+0==0;


 
????? [:pingouino]

n°1331827
Taz
bisounours-codeur
Posté le 24-03-2006 à 15:57:04  profilanswer
 
n°1331856
smaragdus
whores, drugs & J.S. Bach
Posté le 24-03-2006 à 16:23:41  profilanswer
 

Taz a écrit :

polymères ?


C'est quand une classe herite de plusieurs classes mères ?  :whistle:

n°1331989
nargy
Posté le 24-03-2006 à 21:15:43  profilanswer
 

Vous y avez cru aux classes polymères?

Citation :

c'est quoi le but ?


Rien qu'au ton de vos messages, je me suis tapé un bon fou rire. :lol:
 
> #include <iostream.h>
D'emblée ça commence mal... :)
 
> *((char**)this)=*((char**)&o);
...et là il y a de quoi dresser les cheveux sur la tête :lol:
 
> const char* monnom;
A fait, vous aviez supposé quoi là? :lol:
 
Merci aux participants :)
 
return  :pt1cable: + :pt1cable: == :pt1cable: ;

n°1332037
KangOl
Profil : pointeur
Posté le 25-03-2006 à 00:40:27  profilanswer
 

rien pigé [:pingouino]

n°1332082
bjone
Insert booze to continue
Posté le 25-03-2006 à 12:12:03  profilanswer
 

on est une bande de jeunes, on rigole....

n°1332521
slash33
Posté le 26-03-2006 à 17:54:59  profilanswer
 

Faut pas assigner les pointeurs mais faire une copie de la chaîne.
 
Quelle est la matière de ton polymère ??  :whistle:  Tu cherchais le terme "polymorphe" je suppose...


Message édité par slash33 le 26-03-2006 à 17:57:32

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Classes polymères

 

Sujets relatifs
Complilation séparée et classes[RESOLU] probleme avec le lower_bound d'un vector de classes
Error variable + cours sur les classes.difficulté à appliquer les classes avec un code css
Charger des classes extérieures (genre plugins)classes MySQLi sur free.fr
[ECLIPSE] comment importer des classesQT3 et classes (débutant)
[Java] maj du défilement d'un jtextarea utilisé par 2 classesDocumentation des classes .net
Plus de sujets relatifs à : [C++] Classes polymères


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