OVH Cloud OVH Cloud

Constructeur: init obligatoire de tous les membres ?

4 réponses
Avatar
Vincent
Bonjour,


Lors de l'initialisation automatique des membres d'un classes, tous les
membres doivent-ils obligatoirement être initialisé:


classe A {
int a1;
char* a2;
long a3;
}

est-il possible de déclarer un constructuer ainsi:

A:A(int p1,char* p2) : a1(p1), a2(p2);

Si non peut on initialiser le 3ème membre avec une valeur en dur ?

A:A(int p1,char* p2) : a1(p1), a2(p2), a3(0);

Merci

--
Vincent

4 réponses

Avatar
Jean-Marc Bourguet
Vincent writes:

classe A {
int a1;
char* a2;
long a3;
}

est-il possible de déclarer un constructuer ainsi:

A:A(int p1,char* p2) : a1(p1), a2(p2);


Non, mais en remplacant le ; par {} oui.


Si non peut on initialiser le 3ème membre avec une valeur en dur ?

A:A(int p1,char* p2) : a1(p1), a2(p2), a3(0);


Non, mais en remplacant le ; par {} oui. Tu peux meme mettre ce que
tu veux comme expression.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Vincent
Jean-Marc Bourguet wrote:
Vincent writes:


classe A {
int a1;
char* a2;
long a3;
}

est-il possible de déclarer un constructuer ainsi:

A:A(int p1,char* p2) : a1(p1), a2(p2);



Non, mais en remplacant le ; par {} oui.


Si non peut on initialiser le 3ème membre avec une valeur en dur ?

A:A(int p1,char* p2) : a1(p1), a2(p2), a3(0);



Non, mais en remplacant le ; par {} oui. Tu peux meme mettre ce que
tu veux comme expression.


Oui effectivmenet j'avais bien le bloc de la méthode après.
Mais il sort toujours en erreur de compil. Depuis que j'ai ajouté un
attribut à cette classe, ese constructeurs n'accepte pas l'init de ce
dernier. Et si je ne l'initialise pas, une erreur sort aussi...
Peut être une différence entre les attributs protected et private, sinon
l'attribut est de type complexe (type Ilog) et l'init ne peut peut être
pas se faire de cette façon...


--
Vincent


Avatar
Jean-Marc Bourguet
Vincent writes:

sinon l'attribut est de type complexe (type Ilog) et l'init ne peut
peut être pas se faire de cette façon...


Je ne connais pas ce type, mais pour pouvoir omettre un membre de la
liste d'initialisation, il faut que son type soit initialisable par
defaut (donc pas de reference, pas de type sans constructeur par
defaut accessible).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Vincent
Jean-Marc Bourguet wrote:
Vincent writes:


sinon l'attribut est de type complexe (type Ilog) et l'init ne peut
peut être pas se faire de cette façon...



Je ne connais pas ce type, mais pour pouvoir omettre un membre de la
liste d'initialisation, il faut que son type soit initialisable par
defaut (donc pas de reference, pas de type sans constructeur par
defaut accessible).


Effectivement, j'ai invoqué un constructeur spécifique de cette objet et
maintenant ça passe à la compilation!

Merci!

--
Vincent