Objets imbriqués en c++

pi€rre Messages postés 76 Statut Membre -  
 marvinrouge -
salut la compagnie!!
j'ai des objets imbriqués en C++, et je voudrais savoir comment comment dans le constructeur de l'objet contenant le second, je peux appeller un constructeur particulier
exemple:
class c_point
{
     int x;
     int y;
    C_point(int a, int b);
};

class C_ligne
{
    C_point * tabpoint;
    int nb_point;
    C_ligne(int nb_p);
};

C_ligne::C_ligne(int nb_p)
{
//je veux appeler ici le constructeur de C_point
}
}



@+
pierre L.

5 réponses

  1. DaNot Messages postés 221 Statut Membre 163
     
    Salut,

    Petite remarque en passant : la classe est c_point ou C_point ?

    DaNot
    un Libre ouvert à la source...
    0
  2. pom
     
    Salut Pierre, on n'a pas le code des constructeurs de tes classes, mais je suppose que ton constructeur c_point fait qqch du genre c_point(int a,int b) : x(a), y(b) {}

    Je suppose que tu as déjà essayé

    c_ligne::c_ligne(int nb_p)
    {
    c_point Point(entier1,entier2); // attention a bien définir avant entier1 et entier2
    }

    Sinon, tu peux faire un constructeur par defaut, comme par exemple

    c_point():x(0), y(0) {}

    puis tu te codes une fonction (dans le public de ta classe bien entendu)

    void c_point::modif_point(int x_,int y_): x(x_), y(y_) {}

    et tu peux faire ensuite

    c_ligne::c_ligne(int nb_p)
    {
    c_point Point;
    Point.modif_point(entier1, entier2);
    }

    c'est de la bidouille, mais ca devrait marcher normalement.

    sinon, qqch de très grave : tu as oublié de coder des DESTRUCTEURS !
    Surtout que dans ta classe c_ligne il y a un pointeur donc tu provoques une fuite de mémoire.
    Pour la classe c_point tu fais juste un destructeur...qui ne fait rien (car il n'y a que des entiers) ~c_point() {}

    Mais comme le dit DaNot, fait attention entre c_point et C_point

    salut

    Pom
    0
  3. pi€rre Messages postés 76 Statut Membre
     
    en fait j'ai bien codé mes destructeur, ici il n'y a qu'une partie du code.
    Et merci pour ta bidouille mais ici ce n'etait que le plus simple des cas car j'ai une C_route :
    class C_route
    {
          int taille;
          char nom[50];
          C_ligne trajectoire;
          C_route(nb_points)//il fo que j'appelle le bon constructeur;
    


    merci, @+
    pierre L.
    0
    1. pom
       
      Re,
      j'ai un peu de mal à te répondre car je ne sais pas ce que tu veux mettre dans tes constructeurs c_ligne et c_route.

      Mon deux propositions étaient correctes ou pas (je n'ai pas pu les tester bien entendu) ?

      Si une classe généralise une autre classe, il faut que tu utilises alors l'héritage (c'est tout l'intéret du C++ d'ailleurs)

      pom
      0
  4. pi€rre Messages postés 76 Statut Membre
     
    OK merci c'est ce que je vais faire

    merci, @+
    pierre L.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. marvinrouge
     
    Salut:

    class C_point
    {
    protected:
    int x;
    int y;
    public:
    C_point(int p_x, int p_y) { setX(p_x); setY(p_y); }
    C_point() { x = 0; y = 0; }
    int getX() { return x; }
    int getY() { return y; }
    void setX(int p_x) { x = p_x; }
    void setY(int p_y ) { y = p_y; }
    };

    class C_ligne
    {
    C_point * tabpoint;
    int nb_point;
    C_ligne(int nb_p);
    ~C_ligne() {
    if (tabpoint!=NULL) {
    delete [] tanpoint;
    }
    }
    };

    C_ligne::C_ligne(int nb_p)
    {
    if (nb_p <=0)
    nb_p = 1;

    nb_point = nb_p;
    tabpoint= new C_point[nb_point]
    }
    0