> Tous les forumsAutres langages

 [C++]Appel des méthodes avec l'héritage
Statut du sujet : NON RESOLU Imprimer
 Premium
  Posté le 23/02/2007 @ 17:27  
 Petit astucien

205 Messages
Bonjour,

j'ai une classe Personne :
Personne.hh :
#ifndef PERSONNE_HH
#define PERSONNE_HH

#include "Plage.hh"

class Personne{
protected:
int indice_colonne;
int heure_arrivee;
int heure_depart;

public:
Personne(int indice_colonne, int heure_arrivee, int heure_depart);
void emplacement(Plage & plage);
int getColonne();
int getArrivee();
int getDepart();
};

#endif


Personne.cc
#include <iostream>
#include "Personne.hh"
#include "Plage.hh"

Personne::Personne(int indice_colonne, int heure_arrivee, int heure_depart ){
if(indice_colonne < 0 || indice_colonne >= NBCOLONNES)
printf("indice de colonne incorrecte\n");
if(heure_arrivee < 0 || heure_arrivee > 24 || heure_depart < 0 || heure_depart > 24)
printf("heure incorrecte\n");
this->indice_colonne = indice_colonne;
this->heure_arrivee = heure_arrivee;
this->heure_depart = heure_depart;
}

void Personne::emplacement(Plage & plage){
int ligne = plage.hasard(0,NBLIGNES-1);
int colonne = plage.hasard(0,NBCOLONNES-1);
plage.inserer(ligne,colonne);
}

int Personne::getColonne(){
return indice_colonne;
}

int Personne::getArrivee(){
return heure_arrivee;
}

int Personne::getDepart(){
return heure_depart;
}

et une autre classe Glacier qui hérite de Personne :
Glacier.hh :
#ifndef GLACIER_HH
#define GLACIER_HH

#include "Personne.hh"

class Glacier:public Personne{
private:
int indice_ligne;

public:
Glacier(int indice_colonne, int heure_arrivee, int heure_depart);
int getLigne();
void affiche();
};

#endif


Glacier.cc :
#include <stdlib.h>
#include <iostream>

#include "Glacier.hh"
#include "Personne.hh"

Glacier::Glacier(int indice_colonne, int heure_arrivee, int heure_depart){
Personne(indice_colonne, heure_arrivee, heure_depart);
}

int Glacier::getLigne(){
return indice_ligne;
}

void Glacier::affiche(){
printf("le glacier est a la case %,%\n",getLigne(), getColonne());
printf("Arrivee : %d, Depart : %d\n", getArrivee(), getDepart());
}

int main(){
Glacier g(3, 8, 18);
g.affiche();

return 0;
}


A la compilation, j'obtiens toutes ces erreurs que je ne comprends pas.
Je débute en C++ :
Glacier.cc: Dans constructor « Glacier::Glacier(int, int, int) »:
Glacier.cc:7: error: no matching function for call to `Personne::Personne()'
Personne.hh:6: error: candidates are: Personne::Personne(const Personne&)
Personne.hh:13: error: Personne::Personne(int, int, int)


Pourriez-vous m'indiquer comment corriger cela et m'indiquer comment s'utilise les exceptions car je ne saisis pas très bien.
Par exemple dans le constructeur Personne, j'aimerai lever une exception au lieu de mettre les printf

Merci
 Afficher le profil de PremiumEnvoyer un message privé à Premium
 
 
Publicité
 AlexPrince  Posté le 24/02/2007 à 05:32  
Petit astucien

398 Messages

Change

Glacier::Glacier(int indice_colonne, int heure_arrivee, int heure_depart){
Personne(indice_colonne, heure_arrivee, heure_depart);
}

Pour

Glacier::Glacier(int indice_colonne, int heure_arrivee, int heure_depart) : Personne(indice_colonne, heure_arrivee, heure_depart) {

}

Je te conseille aussi de ne jamais inclure aucun en-tête dans un fichier d'implémentation (.c, .cpp, .cc ...), met les plutôt dans le fichier d'en-tête correspondant.

Afficher le profil de AlexPrinceEnvoyer un message privé à AlexPrince
 Revenir en haut de la page
 koala01  Posté le 27/02/2007 à 13:03  
Astucien

4715 Messages
AlexPrince a écrit :

Je te conseille aussi de ne jamais inclure aucun en-tête dans un fichier d'implémentation (.c, .cpp, .cc ...), met les plutôt dans le fichier d'en-tête correspondant.


Salut,

Juste sur ce point bien précis:

L'inclusion des fichiers d'entetes dans le fichier d'implémentation qui en a besoin et la prédéclaration des classes nécessaire permet d'obtenir une compilation bien plus rapide en cas de modification, en permettant de ne recompiler que les fichiers qui ont effectivement été modifiés alors tous les fichiers inclus dans un .h et ses dépendances (les .cpp correspondants) devront etre recompilés si un seul des fichiers inclus (ou ses dépendances) a été modifé

Cela permet, en outre, de s'affranchir de certaines difficultés propres au "références croisées" (la classe A qui a un membre du type de la classe B qui a, lui meme un membre du type de la classe A...)

Evidemment, cela sous-entend que l'on se trouve dans une situation dans laquelle il est effectivement possible de recourrir à cette technique...

L'éritage étant, justement, une situtation dans laquelle cette technique n'est pas applicable

Afficher le profil de koala01 Voir la configuration de koala01Envoyer un message privé à koala01
  Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsAutres langages

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page