Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1296 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Apeller un constructeur à partir d'un autre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Apeller un constructeur à partir d'un autre

n°1539915
vincent0
Posté le 07-04-2007 à 10:51:29  profilanswer
 

Bonjour,
 
Voici mon code:

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class A
  4. {
  5. public:
  6.  A(void)
  7.  {
  8.   cout<<"Constructeur sans argument"<<endl;
  9.   A(5); //???
  10.  }
  11.  A(int a)
  12.  {
  13.   cout<<"Constructeur avec argument"<<endl;
  14.   val = a;
  15.  }
  16.  int val;
  17. };
  18. int main(void)
  19. {
  20. A a;
  21. cout<<a.val<<endl;
  22. return 0;
  23. };


 
J'aimerais que le constructeur A(void) apelle le constructeur A(int) avec comme valeur 5 mais je ne sais pas comment m'y prendre.
 
J'ai esseyé ceci mais rien n'a fonctionné:
A(5);
this->A(5);
this(5);
 
Comment faire ? est-ce possible ?
 
Merci...

Message cité 1 fois
Message édité par vincent0 le 07-04-2007 à 10:51:52
mood
Publicité
Posté le 07-04-2007 à 10:51:29  profilanswer
 

n°1539917
Dumbledore
Posté le 07-04-2007 à 11:14:21  profilanswer
 

bah, ton code est bon

n°1539920
vincent0
Posté le 07-04-2007 à 11:27:45  profilanswer
 

Non !
 
Quand je fait ceci : "A(5);", il apelle bien le constructeur avec argument mais il cré un nouvel objet !
Si je met this->A(5); ça ne fonctionne plus (erreur à la compilation).
 
D'ailleur quand on exécute mon code, il n'affiche pas la valeur 5 !

n°1539921
Taz
bisounours-codeur
Posté le 07-04-2007 à 11:29:46  profilanswer
 

ouais c'est ça ...
 
1) vire ces void
2) syntax avec argument par défaut A(int i = 5) { }
3) au sein d'une même classe, ce n'est pas possible parce que ça n'a pas de sens. Si tu veux tout factoriser et que tu as beaucoup de prototypes de constructeurs incompatibles, crée une fonction membre privée init. Si tu en as plus, oriente toi vers une factory.

n°1539922
++fab
victime du syndrome IH
Posté le 07-04-2007 à 11:34:30  profilanswer
 

vincent0 a écrit :

J'aimerais que le constructeur A(void) apelle le constructeur A(int) avec comme valeur 5 mais je ne sais pas comment m'y prendre.


(void) est inutile en C++, c'est un vestige de C

 
Citation :

Comment faire ? est-ce possible ?


Ce n'est pas possible actuellement. Il faut dupliquer le code d'initialisation :

 
Code :
  1. struct A
  2. {
  3.     A( int i ) : i_( i ) {}
  4.     A() : i_( 5 ) {}
  5. private:
  6.     int i_;
  7. };
 

On aimerait pouvoir faire ça - ça s'appelle 'delegating constructors' - mais ce n'est pas pour tout de suite :

 
Code :
  1. struct B
  2. {
  3.     B( int i ) : i_( i ) {}
  4.     B() : B( 5 ) {}
  5. private:
  6.     int i_;
  7. };


Message édité par ++fab le 07-04-2007 à 11:52:17

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Apeller un constructeur à partir d'un autre

 

Sujets relatifs
[VB] Lancer excel à partir d'un programme VB [Résolu]Problème pour lancer un fichier midi à partir d'Excel
afficher une image BMP a partir d'un tableau de pixels[wxWidgets] constructeur de la classe wxIPV4address ?
lister les fichiers d'un repertoire à partir d un formulaire htmlRecreer un xml a partir d'un xsd
Comment générer une page PDF à partir d'un script Perl?Obtenir type Class à partir d'un String
Création d'une gallerie d'images a partir d'un répertoireEst-il possible de charger un bootsector à partir d'un OS ?
Plus de sujets relatifs à : Apeller un constructeur à partir d'un autre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR