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

 


Dernière réponse
Sujet : [c++] vecteur de pointeurs vers deux types différents...
art_dupond re - :jap:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
art_dupond re - :jap:
LeGreg 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

art_dupond youp, ca marche comme ca.
 
 
Merci beaucoup
LeGreg j'ma gourre dans le code que je t'ai  
donne:
essaie avec
new tevenement*[NMAX];
 
A+
LEGREG
art_dupond 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();
art_dupond oui merci, c'est ca que j'essayais de faire, mais je savais pas comment le définir :jap:
LeGreg 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]

LeGreg 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
art_dupond

__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...

__Lolo__ 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;
art_dupond résultat, il m'affiche :
 
 
 
1 neuneu 125.36
art_dupond 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. }

art_dupond 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 ?
__Lolo__ 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)
art_dupond 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;
 
...
 
 :??:
El_gringo 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*).
__Lolo__ tu fais un vecteur de pointeurs sur A
art_dupond 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:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)