[CPP] Constructeur gratuit initialise ou initialise pas ?

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [CPP] Constructeur gratuit initialise ou initialise pas ?

Message  jonas le Sam 04 Déc 2010, 11:43

Bonjour,

J'aurais besoin d'une petite précision pour pour le cours de C++.
J'ai noté lors du cours 2 infos qui me paraissent contradictoires:
1) Le constructeur "gratuit" d'une classe crée les attributs (leur alloue de la mémoire) mais ne les initialise pas.
2) Il est conseillé d'utiliser une liste d'initialisation (voir obligatoire pour un attribut constant) car les attributs d'une classe sont initialisés avant qu'on rentre dans le corps de la méthode du constructeur. Et on les initialise donc 2x si on essaye de les initialiser dans la méthode constructeur.

D'où ma question : attributs initialisés ou pas avec constructeur "gratuit" ?

Merci d'avance.


Dernière édition par jonas le Sam 04 Déc 2010, 13:54, édité 1 fois

jonas

Nombre de messages : 234
Prénom : Jonathan
Statut : Ancien industrialisé
Localisation : Devant son clavier BÉPO !
Date d'inscription : 29/09/2008

http://www.xax.be

Revenir en haut Aller en bas

resolu Re: [CPP] Constructeur gratuit initialise ou initialise pas ?

Message  nvs le Sam 04 Déc 2010, 12:52

il faut distinguer les attributs de types primitifs et ceux de type classe. les constructeurs gratis (sans argument et de recopie) mettent les attributs de type primitif dans n'importe quel état (donc en fait n'utilisent pas leur pseudo-constructeur sans argument) tandis que les attributs de type défini par l'utilisateur sont créés (et initialisés) via leur constructeur sans argument Smile

Code:
/*
 * truc.h
 */

#ifndef TRUC_H_
#define TRUC_H_

class Truc
{
   int _i;
public:
   Truc(int i = 27) :
      _i(i)
   {
   }

   int i() const
   {
      return _i;
   }
};

#endif /* TRUC_H_ */

Code:
/*
 * brol.h
 */

#ifndef BROL_H_
#define BROL_H_

#include "truc.h"

class Brol
{
   int _i;
   Truc _t;
public:
   int i() const
   {
      return _i;
   }

   Truc t() const
   {
      return _t;
   }
};

#endif /* BROL_H_ */

Code:
//============================================================================
// Name        : ConstructeurGratis.cpp
//============================================================================

#include "truc.h"
#include "brol.h"

#include <iostream>
using namespace std;

int main()
{
   Brol b;
   cout << b.i() << endl;
   cout << b.t().i() << endl;


   int i = int();
   cout << i << endl;

   int j;
   cout << j << endl;

   return 0;
}

affiche :

Code:
5843776
27
0
82






tongue

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

resolu Re: [CPP] Constructeur gratuit initialise ou initialise pas ?

Message  jonas le Sam 04 Déc 2010, 13:53

ok j'ai compris,
merci beaucoup Smile

jonas

Nombre de messages : 234
Prénom : Jonathan
Statut : Ancien industrialisé
Localisation : Devant son clavier BÉPO !
Date d'inscription : 29/09/2008

http://www.xax.be

Revenir en haut Aller en bas

resolu Re: [CPP] Constructeur gratuit initialise ou initialise pas ?

Message  Contenu sponsorisé Aujourd'hui à 07:11


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum