Rechercher : dans
Par :

[C++]Appel des méthodes avec l'héritage

Dernière réponse le 24 fév 2007 à 03:04:58 max, le 23 fév 2007 à 15:31:31 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [C++]Appel des méthodes avec l'héritage » dans :
Le mot-clé static ou les attributs et méthodes de classe en POO Voir(NOTE: Cet article explique la signification du mot-clé static au sein d'une classe. La signification de "static" en C n'a par exemple rien à voir.) Vous êtes débutant en programmation orientée objet. En Java, en C++...ou que sais-je encore,...
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les inlines en C++ VoirSignification Exemple 1 Inline et headers Exemple 2 Signification Le mot-clé inline est utilisé en C++ et s'applique à une fonction. Il indique au compilateur que chaque appel à la fonction inline devra être remplacé par le corps de cette...
Javascript: les méthodes associées aux objets VoirQu'appelle-t-on une méthode? Une méthode est une fonction associée à un objet, c'est-à-dire une action que l'on peut faire exécuter à un objet. Les méthodes des objets du navigateur sont des fonctions définies à l'avance par les normes HTML, on ne...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Java - L'héritage VoirLa notion d'héritage Le concept d'héritage est un des concepts les plus importants de la programmation orientée objet, car il conditionne irréversiblement la façon selon laquelle un code Java est écrit. L'héritage est un mécanisme permettant de...

1

 mamiemando, le 24 fév 2007 à 03:04:58
  • +1

Il faut simplement créer un constructeur par défaut pour la classe Personne (utilisé dans glacier.cc ligne 7)

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

Répondre à mamiemando
Collection CommentÇaMarche.net