[C++]Appel des méthodes avec l'héritage
Bonjour,
j'ai une classe Personne :
Personne.hh :
Personne.cc
et une autre classe Glacier qui hérite de Personne :
Glacier.hh :
Glacier.cc :
A la compilation, j'obtiens toutes ces erreurs que je ne comprends pas.
Je débute en C++ :
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
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
A voir également:
- [C++]Appel des méthodes avec l'héritage
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Appel privé - Guide
- Prix d'un appel local - Forum Vos droits sur internet
- Prix d'un appel local - Forum telephonie fixe
- Double appel - Guide
1 réponse
Il faut simplement créer un constructeur par défaut pour la classe Personne (utilisé dans glacier.cc ligne 7)
Mais en fait je pense que tu n'as pas écrit ce que tu voulais à cet endroit ce n'est pas plutôt :
Pour les exceptions c'est simple il suffit d'inclure le header stdexcept et de lancer une exception, éventuellement rattrapée par un bloc try, catch. Mais tu peux aussi utiliser les assertions.
Moi ce que j'aime bien dans les assertions c'est que tu peux les ignorer à la compilation (attention donc à ne mettre que des tests qui ne modifient pas de variable) pour accélérer le programme une fois la phase de debug terminée.
Bonne chance
Personne(){}
Mais en fait je pense que tu n'as pas écrit ce que tu voulais à cet endroit ce n'est pas plutôt :
Glacier::Glacier(int indice_colonne, int heure_arrivee, int heure_depart) : Personne(indice_colonne, heure_arrivee, heure_depart) {}
Pour les exceptions c'est simple il suffit d'inclure le header stdexcept et de lancer une exception, éventuellement rattrapée par un bloc try, catch. Mais tu peux aussi utiliser les assertions.
#include <stdexcept> #include <cassert> void f(int x){ if(x<0) throw std::runtime_error("excection"); } void g(int x){ assert(x>=0); // bloque si x<0 }
Moi ce que j'aime bien dans les assertions c'est que tu peux les ignorer à la compilation (attention donc à ne mettre que des tests qui ne modifient pas de variable) pour accélérer le programme une fois la phase de debug terminée.
Bonne chance