Apeller un constructeur à partir d'un autre

Apeller un constructeur à partir d'un autre - C++ - Programmation

Marsh Posté le 07-04-2007 à 10:51:29    

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
Reply

Marsh Posté le 07-04-2007 à 10:51:29   

Reply

Marsh Posté le 07-04-2007 à 11:14:21    

bah, ton code est bon

Reply

Marsh Posté le 07-04-2007 à 11:27:45    

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 !

Reply

Marsh Posté le 07-04-2007 à 11:29:46    

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.

Reply

Marsh Posté le 07-04-2007 à 11:34:30    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed