Bonjour -- >Constructeur en c++

abdel -  
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour
j'ai un petit probleme avec les constructeurs :

comment fonctionne les constructeurs
si vous pouvez me donner un exemple ou un site ou c'est tres
bien explique

merci a tous ceux qui repondrons

5 réponses

batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114
 
slt,
Ta question n'est pas assez précise pour un post dans un forum, que ne comprends tu pas en ce qui concerne les constructeurs ?

Cherche dans les supports de cours de CCM.

En gros, un constructeur c'est la première fonction associée à ton objet qui est appelée à son instanciation, c donc là que tu fais les allocations et les initialisations nécessaires, etc..

@++

Vous hésitez entre Linux et Windows ?
Vous voulez dépenser du temps ou de l'argent ?
0
Goblins Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   1
 
Tout d'abord, Bonjour Batman,

j'ai une question un peux plus,précise au sujet des constructeur, dans les classes dérivée...(j'espère sincèrement que tu as une réponse...) J'ai une classe mère et une classe qui en hérite et tout ce passe à merveille, à coté de ça, j'ai une autre classe mère et la classe fille qui en hérite et mon constructeur par défaut dans ma classe fille n'est pas accepté par le compilateur, or, j'ai suivi exactelent le même protocle que pour la première.... Le compilateur me dit qu'il y un appel ambigus et qu'il y a définition de plusieurs constructeurs par défaut dans ma classe mère...

j'en suis déjà à plusieurs heures (voir jour) de recherche et un peux d'aide ne me ferrait pas de mal je pense... C'est probablement une bêtise mais ça bloque...

Je joint,
1. les messages d'erreur du compilateur
2. le code (.h) de mes deux classes.



1.Erreur compilateur:
warning C4520: 'CPersonnes' : multiple default constructors specified

error C2668: 'CPersonnes::CPersonnes' : ambiguous call to overloaded function

2.Code:
#ifndef _CPERSONNES_H_
#define _CPERSONNES_H_


#define VISUAL


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#ifdef VISUAL
#include <iostream.h>
#endif


const int l_nom=60;
const int l_pre=60;
const int l_nai=11;

#define NUM unsigned int

class CPersonnes
{
friend ostream& operator<<(ostream& s, const CPersonnes& P);

protected:
char *nom;
char *prenom;
char *naissance;

public:
CPersonnes();
CPersonnes(char *n=0, char *p=0, char *d=0);
CPersonnes(const CPersonnes& P);
virtual ~CPersonnes();

//get set
char* getNom() const {return nom;}
char* getPrenom() const {return prenom;}
char* getNaissance() const {return naissance;}

void setNom(const char *n);
void setPrenom(const char *p);
void setNaissance(const char *d);

//methode classe
virtual void affiche() const;
};




class CMembrePersonnel:public CPersonnes
{
//friend ostream& operator<<()

private:
NUM numperso;

public:
CMembrePersonnel():CPersonnes()
{
setNumperso(0);
}

CMembrePersonnel(char *n, char *p, char *d, NUM nu):CPersonnes(n, p, d)
{
setNumperso(nu);
}

CMembrePersonnel( const CPersonnes& P, const CMembrePersonnel& M): CPersonnes(P)
{
setNumperso(M.getNumperso());
}

//virtual~CMembrePersonnel(void){;}

//get set
getNumperso() const {return numperso;}

setNumperso(const NUM n){numperso=n;}

//methode classe
void affiche() const;

};

#endif
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Ba oui, evidemment... Le problème ne viens pas vraiment du constructeur, mais de l'appel avec les paramètres par défaut !
si tu fait :
CPersonnes a().
Le compilo doit prendre quel constructeur ?
CPersonnes();
ou
CPersonnes(char *n=0, char *p=0, char *d=0);
Donc pour résoudre ton problème, il suffit de faire :
CPersonnes(char *n, char *p=0, char *d=0);
Moralité: toujours croire ce que le compilateur dit (surtout qd le message est aussi clair).
0
Goblins Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci.
0
Utilisateur anonyme
 
Bonjour,

Je ne suis pas expert du C++ mais j'ai trouvé un truc pour bien
comprendre les constructeurs/destructeurs.

En cour de développement, n'hésitez pas à placer des [ cout ]
à l'intérieur du/des constructeurs.

ex:
cout >> "Constructeur numero 1 en action" >> endl;

cout >> "Destructeur numero1 en action" >> endl;


Lupin
0
Goblins Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   1
 
Oui, en effet il faut de fait inverser les <<, mais je ne pouvait m'aider d'un quelconque affichage parce que le compilateur refusait de linker -> pas d'exécutable...

Qu'a cela ne tienne, la technique est très pratique notemment pour les destructeur et les fonctions virtuel...
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Il faut inverser les petites flêches avec cout....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
re:

désolé pour l'erreur, mais comme je disais je ne suis pas expert et il y aura maintenant 3 ans que j'ai suivi ma formation en c++, et je ne pratique que sporadiquement.

Lupin
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

Je pense que je peux pardonner à quelqu'un une erreur de syntaxe en C++ ;-)
0