> 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
89,99 €Liseuse Amazon Kindle Paperwhite avec éclairage intégré, WiFi, IPX8 à 89,99 €
Valable jusqu'au 03 Avril

Amazon fait une superbe promotion sur la toute dernière version de sa liseuse Kindle Paperwhite (8ème génération) . Elle passe ainsi à 89,99 € au lieu de 129,99 € (avec offres spéciales) ou à 109,99 €au lieu de 139,99 € (sans offres spéciales). La livraison est gratuite. Cette liseuse a de nombreux avantages notamment son écran d'excellente qualité. Elle est maintenant résistante à l'eau (IPX8), afin que vous puissiez lire en toute tranquillité à la plage, au bord de la piscine ou dans le bain. Cette liseuse dispose du WiFi, de l'affichage encre électronique et surtout d'un rétro éclairage intégré pratique pour lire confortablement, quelle que soit les conditions d'éclairage (la nuit, en plein soleil, ...). Pratique pour emmener votre bibliothèque partout avec vous ! Formats pris en charge : Kindle Format 8 (AZW3), Kindle (AZW), TXT, PDF, MOBI non protégé, PRC natif ; HTML, DOC, DOCX, JPEG, GIF, PNG, BMP converti. Vous pouvez également les fichiers Epub avec cette astuce. La version avec offres spéciales (moins chère) affiche de la publicité pour des livres lors de la mise en veille de l'appareil (jamais pendant la lecture d'un livre). 


> Voir l'offre
99,99 €Adobe Creative Cloud pour la photo (Adobe Photoshop CC et Lightroom) à 99,99 €
Valable jusqu'au 02 Avril

Amazon propose actuellement le code d'activation pour Adobe Creative Cloud à 99,99 € alors qu'on le trouve ailleurs à 140 € environ. Vous pourrez ainsi accéder pendant 1 an aux meilleurs outils de photographie du monde, dont Adobe Photoshop CC et Lightroom (mobile, web et pour poste de travail) ainsi qu'à une vaste bibliothèque de didacticiels vidéo pour maitriser ces logiciels. Cette offre est valable pour MAC et pour PC


> Voir l'offre
11 €Carte mémoire Samsung 64 Go MicroSDXC Evo Plus U3 à 11 €
Valable jusqu'au 02 Avril

Un vendeur sur Amazon fait une promotion sur la carte mémoire Samsung 64 Go MicroSDXC Evo Plus U3 qui passe à 11 € livrée gratuitement. Elle est idéale pour les téléphones, caméras et appareils photo 4K. Elle est étanche, anti-choc et résiste aux rayons X et aux champs magnétiques. 


> 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