× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 [C++]Appel des méthodes avec l'héritage
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Premium
  Posté le 23/02/2007 @ 17:27 
Aller en bas de la page 
Petit astucien
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
Publicité
AlexPrince
 Posté le 24/02/2007 à 05:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

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.

koala01
 Posté le 27/02/2007 à 13:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
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

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
134,48 €Ecran 27 pouces BenQ BL2780 (Full HD, IPS, 75 Hz, ajustement auto de la luminosité) à 134,48 €
Valable jusqu'au 15 Juillet

Amazon propose actuellement l'écran 27 pouces BenQ BL2780 à 134,48 € livré gratuitement alors qu'on le trouve ailleurs à plus de 179 €. Cet écran à LED dispose d'une dalle IPS Full HD (1920x1080) à contours fins, d'un temps de réponse de 5 ms et de connecteurs DP, VGA et HDMI. Cet écran dispose aussi des technologies Flicker-Free et Low Blue Light pour limiter les scintillements et les effets notifs de la lumière bleue. Il peut également adapter automatiquement la luminosité de l’écran à la lumière ambiante. Des haut-parleurs sont intégrés (2x2W).


> Voir l'offre
GratuitJeu PC Killing Floor 2 gratuit
Valable jusqu'au 16 Juillet

Epic Game Store offre actuellement le jeu PC Killing Floor 2. Dans KILLING FLOOR 2, les joueurs découvrent une Europe continentale ravagée par une épidémie irrépressible de clones horribles et mortels, les Zeds, créés suite à des expérimentations ratées menées par des rebelles au sein de Horzine Corporation. Jouez en coopération à 6 joueurs... PEGI 18. Jeu en français.


> Voir l'offre
10,02 €Adaptateur Bluetooth USB TP-Link UB400 à 10,02 €
Valable jusqu'au 18 Juillet

Amazon fait une promotion sur l'adaptateur Bluetooth USB TP-Link UB400 qui passe à 10,02 €. Cet adaptateur à brancher sur un port USB va vous permettre d'ajouter le bluetooth à votre ordinateur et d'utiliser ensuite sans fil vos périphériques bluetooth : souris, clavier, casque, manette, téléphone, ...


> Voir l'offre

Sujets relatifs
Ameliorer le Main "Java" avec les fonctions & procédures
concatenation avec Arduino
URGENT ! Fin de développement d'application C++ avec MFC
Problème avec WinPython - Spyder
Convertir un fichier image de 2002 avec extension ".GOOD"
Correction conditionnelle avec TEXTPAD OU NOTEPAD
Site dynamique avec Dream et Wamp
macro excell pour ouverture fichier avec password
Comment coloriser les doublons et unique avec VBA
Carnet Adresse avec VB
Plus de sujets relatifs à [C++]Appel des méthodes avec l''héritage
 > Tous les forums > Forum Autres langages