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

  FORUM HardWare.fr
  Programmation

  [c++] vecteur de pointeurs vers deux types différents...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] vecteur de pointeurs vers deux types différents...

n°85953
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 06:22:40  profilanswer
 

bonjour les gens,
 
voilà, je dois faire un vecteur de pointeurs vers deux types différents.
 
Vers deux classes qui dérivent d'une même autre classe en fait.
 
Mais j'y arrive pas :(
 
 
 
donc :  
 
class A
 
class B : public A
class C : public A
 
 
vecteur de pointeurs vers des B's et des C's
 
 
Voili, si quelqu'un pouvait m'expliquer comment qu'il faut faire... :jap:

mood
Publicité
Posté le 04-01-2002 à 06:22:40  profilanswer
 

n°85959
__Lolo__
C'est pouleversant !
Posté le 04-01-2002 à 08:44:32  profilanswer
 

tu fais un vecteur de pointeurs sur A

n°85960
El_gringo
Posté le 04-01-2002 à 08:55:13  profilanswer
 

et selon le besoin, tu cast (conversion de type) des pointeurs quand tu veux les utiliser.
si celui que t'as récupéré est un pointeur vers un objet de type B, tu le cast par (B*), sinon (C*).

n°85964
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 09:31:00  profilanswer
 

donc, si j'ai bien compris :
 
B element_de_type_B;
C element_de_type_C;
 
 
A * vecteur = new A[max];
 
(B*) vecteur[0] = element_de_type_B;
(C*) vecteur[1] = element_de_type_C;
 
...
 
 :??:

n°85965
__Lolo__
C'est pouleversant !
Posté le 04-01-2002 à 09:35:46  profilanswer
 

B element_de_type_B;  
C element_de_type_C;  
 
 
A* vecteur = new A[max];  
 
vecteur[0] = (A) element_de_type_B;  
vecteur[1] = (A) element_de_type_C;
 
ms la c pas un vecteur de pointeurs sur A que t'as, c un vecteur de A (suffit de rajouter les * aux bons endroits :D)

n°85968
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 09:41:22  profilanswer
 

et c'est où les bons endroits ? :na:  :D  
 
 
puis, y a comme une contradiction avec ce que El_Gringo a dit :sweat:  
 
C'est quoi qu'est bong pleaz :jap:  
 
 
 
 
 
je suis neuneu ! n'est-ce pas ?


---------------
oui oui
n°85973
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 10:02:23  profilanswer
 

argh, j'y arrive pas.
 
en fait, j'arrive à mettre les éléments de types B dans mon vecteur ; mais le problème, c'est que quand je veux afficher ces éléments, ils sont devenus des éléments de type A :sweat:  
 
 
Bong, je vous mets le code au cas où...
 

Code :
  1. #include <vcl.h>
  2. #include <iostream.h>
  3. #include <fstream.h>
  4. #include <iomanip.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <math.h>
  8. #define MAX 500
  9. class tevenement
  10. {
  11. short flag;
  12. string name;
  13. float time;
  14. public:
  15.       tevenement() { flag=0; name=""; time=0;}
  16.  tevenement(short drapeau, string nom, float temps) { flag=drapeau; name=nom; time=temps;}
  17.       virtual void affiche() { cout << flag << " " << name << " " << time << " ";}
  18.  ~tevenement() {}
  19.      tevenement & operator=(const tevenement &);
  20. };
  21. tevenement & tevenement::operator=(const tevenement & kablouille)   //------  =
  22. {
  23.    flag = kablouille.flag;
  24.    name = kablouille.name;
  25.    time = kablouille.time;
  26.    return *this;
  27. }
  28. class tdroit : public tevenement
  29. {
  30. string fichier;
  31. public:
  32.       tdroit() { fichier="";}
  33.  tdroit(short, string, float, string);
  34.       void affiche()
  35.       {
  36.          cout << "tdroit\n";
  37.          tevenement::affiche();
  38.          cout << fichier << endl;
  39.       }
  40.  ~tdroit() {}
  41. };
  42. class tpermission : public tevenement
  43. {
  44. float number;
  45. public:
  46.       tpermission() { number=0;}
  47.  tpermission(short, string, float, float);
  48.       void affiche()
  49.       {
  50.          cout << "tpermission\n";
  51.          tevenement::affiche();
  52.          cout << number << endl;
  53.       }
  54.  ~tpermission() {}
  55. };
  56. tdroit::tdroit(short court, string corde, float bateau, string fil) : tevenement(court, corde, bateau)
  57. {
  58. fichier = fil;
  59. }
  60. tpermission::tpermission(short court, string corde, float bateau, float barque) : tevenement(court, corde, bateau)
  61. {
  62. number = barque;
  63. }
  64. /**********************************************************************/
  65. //    fin déclaration des classes
  66. /**********************************************************************/
  67. void main()
  68. {
  69.    tevenement * vecteur = new tevenement[MAX];
  70.    tevenement crotte;
  71.    tdroit a(1,"neuneu",125.36,"brol.dat" );
  72.    tpermission b(0,"yaya",258.36,52);
  73. //   a.affiche();
  74. /*
  75.    vecteur[1] = *(&a);
  76.    vecteur[1].affiche();
  77. */
  78.    vecteur[1] = *(tdroit*) (&a);
  79.    vecteur[1].affiche();
  80.    int attend;
  81.    cin >> attend;
  82. }


---------------
oui oui
n°85975
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 10:03:28  profilanswer
 

résultat, il m'affiche :
 
 
 
1 neuneu 125.36


---------------
oui oui
n°85976
__Lolo__
C&#039;est pouleversant !
Posté le 04-01-2002 à 10:05:02  profilanswer
 

B* ptr_B;  
C* ptr_C;  
 
A* vecteur[max]; <-- la j'suis pas tres sur de ma creation de tableaux de pointeurs..
 
vecteur[0] = (A*) ptr_B;  
vecteur[1] = (A*) ptr_C;

n°85977
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 10:07:17  profilanswer
 

__Lolo__ a écrit a écrit :

B* ptr_B;  
C* ptr_C;  
 
A* vecteur[max]; <-- la j'suis pas tres sur de ma creation de tableaux de pointeurs..
 
vecteur[0] = (A*) ptr_B;  
vecteur[1] = (A*) ptr_C;  




 
 
ca va pas, parce que ca transforme le ptr_B en type A
 
et ce que je veux, c'est qu'il fasse pointer vecteur[0] vers un type B...


---------------
oui oui
mood
Publicité
Posté le 04-01-2002 à 10:07:17  profilanswer
 

n°86001
LeGreg
Posté le 04-01-2002 à 11:36:25  profilanswer
 

vecteur[1] = *(tdroit*) (&a);  
c'est sense faire quoi ca??
si a est de type tdroit alors
il est de type evenement aussi
et donc
vecteur[1] = &a;
ca suffit.
 
A+
LEGREG

n°86002
LeGreg
Posté le 04-01-2002 à 11:41:00  profilanswer
 

t'as aussi un probleme avec les pointeurs toi..
 
tu dois definir un tableau de pointeurs
et non pas un tableau de type tevenement
 
tevenement **vecteur = new tevenement*[NMAX];
...
vecteur[1] = &a;
vecteur[1]->affiche();
 
A+
LEGREG
update: le code devrait marcher maintenant

 

[edtdd]--Message édité par legreg--[/edtdd]

n°86021
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 12:54:13  profilanswer
 

oui merci, c'est ca que j'essayais de faire, mais je savais pas comment le définir :jap:


---------------
oui oui
n°86024
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 12:58:42  profilanswer
 

argh, ca marche pas avec
 
tevenement **vecteur = new (tevenement*)[NMAX];  
 
 
 
 
J'suis finalement passé par une structure
 
struct pointeureurs
{
   tevenement * pointeurs;
};
 
 
 
puis:
 
   pointeureurs *vecteur = new pointeureurs[MAX];
   vecteur[1].pointeurs = &td;
   vecteur[1].pointeurs->affiche();


---------------
oui oui
n°86027
LeGreg
Posté le 04-01-2002 à 13:20:56  profilanswer
 

j'ma gourre dans le code que je t'ai  
donne:
essaie avec
new tevenement*[NMAX];
 
A+
LEGREG

n°86030
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 13:33:40  profilanswer
 

youp, ca marche comme ca.
 
 
Merci beaucoup


---------------
oui oui
n°86032
LeGreg
Posté le 04-01-2002 à 13:34:26  profilanswer
 

bon c'est pas encore parfait ;)
 
si tu utilises new il faut toujours
faire un delete derriere
donc avant de quitter ton programme
tu fais un  
delete []vecteur;
 
ne pas oublier le [] sinon de mauvaises
choses se passent.
 
tu n'es pas oblige d'utiliser new et delete.
en C++ comme en C tu peux allouer
des tableaux de machin sur la pile
et ils sont detruits automatiquement
en dehors du scope de ta fonction:

Code :
  1. int main() { 
  2.   tevenement *vecteur[NMAX];
  3.   vecteur[1] = &a;
  4.   vecteur[1]->affiche();
  5. }


 
attention a cette histoire de scope:
si tu veux que ton objet continue
a exister en dehors de ta fonction
il faut utiliser new et non pas
allouer sur la pile.
ici ca ne pose pas de probleme
parce que tout est declare dans le main().
 
A+
LEGREG

n°86037
art_dupond
je suis neuneu... oui oui !!
Posté le 04-01-2002 à 13:40:13  profilanswer
 

re - :jap:


---------------
oui oui

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

  [c++] vecteur de pointeurs vers deux types différents...

 

Sujets relatifs
[java] convertir un vecteur en un tableau a 2 dim[Tomcat] rediriger tous les acces à un site vers une page
[c++] petite question sur les pointeurs (pas un problème)[PHP] : mise a jour vers 4.1.0
du Pascal vers du C[c++] vecteur dynamique ?
[C/C++] Pb Pointeurs (apparamment...)[PHP]le meilleur moyen de faire une redirection vers une page WEB????
Pointeurs VBPetite question flash vers screen saver ??
Plus de sujets relatifs à : [c++] vecteur de pointeurs vers deux types différents...


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