Objets imbriqués en c++

Fermé
pi€rre Messages postés 76 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 13 octobre 2005 - 23 juin 2004 à 09:25
 marvinrouge - 23 juin 2004 à 11:56
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

DaNot Messages postés 221 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 4 novembre 2005 163
23 juin 2004 à 10:10
Salut,

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

DaNot
un Libre ouvert à la source...
0
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
pi€rre Messages postés 76 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 13 octobre 2005
23 juin 2004 à 11:40
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
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
pi€rre Messages postés 76 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 13 octobre 2005
23 juin 2004 à 11:47
OK merci c'est ce que je vais faire

merci, @+
pierre L.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
marvinrouge
23 juin 2004 à 11:56
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