OVH Cloud OVH Cloud

surcharge de constructeurs

6 réponses
Avatar
3dsman
salut tout le monde!

Voila je me met progressivement au c++ e la je suis tombé face a un
probleme:

j'ai besoin de surcharger un constructeur d'une classe A

j'ai donc deux constructeurs:

A(int param1; int param2; int param3; int param4);
et
A( int param1; int param2; int param3);

est ce que je peut dans
A( int param1; int param2; int param3; int param4);
faire apel a A( int param1; int param2; int param3);

genre:
A( int param1; int param2; int param3; int param4){
A( param1, param2,param3);
truc=param4;
}

j'ai trouvé que des exemples ou ils recopiaient le code de a A( int
param1; int param2; int param3; int param4) dans
A( param1, param2,param3) et je trouve ca un peu "crade"

qq1 a il une soluce?

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com

6 réponses

Avatar
Christophe de VIENNE
3dsman wrote:
salut tout le monde!

Voila je me met progressivement au c++ e la je suis tombé face a un
probleme:

j'ai besoin de surcharger un constructeur d'une classe A

j'ai donc deux constructeurs:

A(int param1; int param2; int param3; int param4);
et
A( int param1; int param2; int param3);

est ce que je peut dans
A( int param1; int param2; int param3; int param4);
faire apel a A( int param1; int param2; int param3);


non

[...]

j'ai trouvé que des exemples ou ils recopiaient le code de a A( int
param1; int param2; int param3; int param4) dans
A( param1, param2,param3) et je trouve ca un peu "crade"

qq1 a il une soluce?



Met le code commun dans une fonction que tu appelles depuis les
constructeurs :

A::A( int param1; int param2; int param3; int param4)
{
init();
}

A::A( int param1; int param2; int param3)
{
init();
}

cela dit, si la version de ton constructeur à 3 paramètres fait la même
chose que celle avec 4, mais en prenant une valeur par défaut pour
param4, il vaut mieux écrire :

class A
{
A(int p1, int p2, int p3, int p4 = 0); // en admettant que la
// valeur par défaut est 0 évidemment

//...
};

A+

Christophe

--
Christophe de Vienne

Avatar
Horst Kraemer
3dsman wrote:

salut tout le monde!

Voila je me met progressivement au c++ e la je suis tombé face a un
probleme:

j'ai besoin de surcharger un constructeur d'une classe A

j'ai donc deux constructeurs:

A(int param1; int param2; int param3; int param4);
et
A( int param1; int param2; int param3);

est ce que je peut dans
A( int param1; int param2; int param3; int param4);
faire apel a A( int param1; int param2; int param3);


Non. On ne peut jamais "appeler" un constructeur. Quand A est une
classe et tu dis

A(....)

quelque part, alors cette expression crée toujours un *nouveau* objet
du type A.

genre:
A( int param1; int param2; int param3; int param4){
A( param1, param2,param3);
truc=param4;
}


Dans ce cas simple il ne te faut qu'un seul constructeur

A( int param1, int param2, int param3, int param4=NOPARAM) :
truc(param4) { /* ici le code de la version avec 3 paramètres
sans l'initialisation de 'truc' */ }

où NOPARAM est la valeur par laquelle tu initialiserais truc dans un
constructeur avec trois paramètres.

--
Horst

--
Lâche pas la patate!

Avatar
drkm
Horst Kraemer writes:

Non. On ne peut jamais "appeler" un constructeur. Quand A est une
classe et tu dis

A(....)

quelque part, alors cette expression crée toujours un *nouveau* objet
du type A.


Même dans :

struct B : A {
B() : A() { }
} ;

?

--drkm

Avatar
3dsman
oki merci beaucoup

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
Horst Kraemer
drkm wrote:

Horst Kraemer writes:

Non. On ne peut jamais "appeler" un constructeur. Quand A est une
classe et tu dis

A(....)

quelque part, alors cette expression crée toujours un *nouveau* objet
du type A.


Même dans :

struct B : A {
B() : A() { }
} ;

?


Pourquoi pas ?

--
Horst

--
Lâche pas la patate!


Avatar
drkm
Horst Kraemer writes:

Pourquoi pas ?


Réponse habituelle : faudrait que j'arrête de poster après 01:00.

Merci.

--drkm