Objets imbriqués en c++

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. Salut,

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

    DaNot
    un Libre ouvert à la source...
    0
    1. 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
      1. 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. 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
      2. OK merci c'est ce que je vais faire

        merci, @+
        pierre L.
        0
        1. 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