Constructeur et initialisation
mimo
-
Goblins Messages postés 13 Statut Membre -
Goblins Messages postés 13 Statut Membre -
j'ai creer une classe sans constructeur, puis une autre qui etend la premiere avec un constructeur pour initialiser les membres herité et ses propre membres sauf que le compilateur me dit que la super classe ne contient pas de constructeur pour l'initialisation. pourquoi?
A voir également:
- Constructeur et initialisation
- Constructeur automobile - Guide
- Adresse mac constructeur - Guide
- L'initialisation du rockstar game launcher a échoué - Forum Jeux PC
- Le Nouveau Launcher Rockstar Games Crash Au Lancement Sur Pc, Aidez Moi SVP ✓ - Forum Jeux PC
- Laucher Rockstar - Forum Jeux PC
3 réponses
lorsque que tu utilise un constructeur dans une classe dérivée, celui ou ceux de la classe mère doivent impérativement être implémenté. je ne l'ai jamais vu spécifié sous cette forme mais dans les faits, c'est ce que j'ai toujours remarqué.
De plus, c'est souvent conseillé dans la littérature.
De plus, c'est souvent conseillé dans la littérature.
Si tu construit une super classe, ou même n'importe quelle classe, il te faut toujours faire un constructeur, car justemnet dans le cas ou il s'agit d'une classe mère ou super classe, tes classes filles devant appellée le constructeur de la classe mère dans leur constructeur elle ne le trouveront pas ce qui te fait ton erreur actuelle.
eX :
Sinon une classe sans constructeur s'appelle une interface. Et dans ce cas là, les interfaces n'ont que les déclarations des fonctions, le corps étant défini dans les classes qui étendent l'interface.
eX :
class Mere {
private int nbEnfant = 0;
Mere ( int nbEnfant ){
this.nbEnfant = nbEnfant;
}
...
}
class fille extends Mere {
...
Fille ( int nbEnfant ){
super(nbEnfant);
...
}
}
Sinon une classe sans constructeur s'appelle une interface. Et dans ce cas là, les interfaces n'ont que les déclarations des fonctions, le corps étant défini dans les classes qui étendent l'interface.
Tout d'abord, Bonjour a tous,
j'ai une question au sujet des constructeur, dans les classes dérivée...(j'espère sincèrement que vous aurez 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
j'ai une question au sujet des constructeur, dans les classes dérivée...(j'espère sincèrement que vous aurez 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