Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2946 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Debutant] Heritage et appel de fonction

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Debutant] Heritage et appel de fonction

n°1325980
groskachou
Posté le 15-03-2006 à 16:25:14  profilanswer
 

Bonjour,
J'essaye de bien comprendre l'héritage sous c++ alors je me suis fait un petit programme de base. J'ai donc une classe mammifere et une classe chat. La classe chat dérive donc de la classe mammifere. J'essaye de créer mon chat qui est donc un mammifere et d'afficher que c'est un type mammifere mais le compilateur me sors une erreur que je ne comprend pas :
 
cannot call member function `std::string Mammifere::GetType()' without object
 
Voici le code des 2 classes :
 
Classe Mammifere :

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class Mammifere
  4. {
  5.       private:
  6.              int pattes;
  7.              string type;
  8.       public:
  9.              Mammifere()
  10.              {
  11.                 this->pattes = 4;
  12.                 this->type = "Mammifere";
  13.              }
  14.            
  15.              ~Mammifere()
  16.              {
  17.                 cout << "Destruction du mammifere" << endl;
  18.              }
  19.            
  20.              friend ostream & operator<<(ostream & os, const Mammifere & Mam)
  21.              {
  22.                 cout << "type: " << Mam.type << endl;
  23.                 cout << "Nombres de pattes: " << Mam.pattes << endl;
  24.                 return os;
  25.              }
  26.            
  27.              int GetNbrePattes()
  28.              {
  29.                  return pattes;
  30.              }
  31.            
  32.              string GetType()
  33.              {
  34.                  return type;
  35.              } 
  36. };


 
Classe Chat :

Code :
  1. #include <iostream>
  2. #include "Mammifere.cpp"
  3. using namespace std;
  4. class Chat : public Mammifere
  5. {
  6.       private:
  7.          string cri;
  8.          string couleur;
  9.      
  10.       public:
  11.          Chat() : Mammifere()
  12.          {
  13.             this->cri = "miaou";
  14.             this->couleur = "blanc";
  15.          }
  16.        
  17.          ~Chat()
  18.          {
  19.          }
  20.        
  21.          friend ostream & operator<<(ostream & os, const Chat & chat)
  22.          {
  23.             string type = Mammifere::GetType();    //<<< ERREUR ICI !!!!
  24.             //int pattes = Mammifere::GetNbrePattes();
  25.             //cout << "Le chat est un " << type << " avec " << pattes << " pattes." << endl;
  26.             //cout << "Son cri est " << cri << " et sa couleur est " << couleur << "." << endl;
  27.             return os;
  28.          }
  29. };


 
La ligne qui pose problème est indiqué ds le code par "<<< ERREUR ICI !!!!" juste au dessus. Merci de votre aide. Je pense que c'est pas grand chose mais je vois pas d'ou ca peut provenir.
 
Un grand merci a vous.
 
Groskachou


Message édité par groskachou le 15-03-2006 à 18:24:31
mood
Publicité
Posté le 15-03-2006 à 16:25:14  profilanswer
 

n°1326097
groskachou
Posté le 15-03-2006 à 18:31:20  profilanswer
 

Personne pour m'aider ??

n°1326114
skelter
Posté le 15-03-2006 à 18:58:47  profilanswer
 

chat->GetType()
 
ce n'est pas une bonne idée le friend la, il peut facilement etre évité, en plus tu fournies les méthodes d'accés aux membres
 
fais attention à ne pas oublier les destructeurs virtuels si tu comptes rendres tes classes polymorphiques


Message édité par skelter le 15-03-2006 à 18:59:06
n°1326148
Taz
bisounours-codeur
Posté le 15-03-2006 à 19:57:28  profilanswer
 

Code :
  1. #include <iostream>
  2. class Printable
  3. {
  4. public:
  5.   virtual void print(std::ostream &os) const = 0;
  6.   virtual ~Printable() { }
  7. };
  8. inline std::ostream & operator<<(std::ostream &os, const Printable &p)
  9. {
  10.   p.print(os);
  11.   return os;
  12. }
  13. class Document : public Printable
  14. {
  15. public:
  16.   virtual void print(std::ostream &os) const
  17.   {
  18.     os << "Document";
  19.   }
  20. };
  21. int main()
  22. {
  23.   Document d;
  24.   Printable &rp(d);
  25.   Printable *pp(&d);
  26.   std::cout << d << '\n'
  27.     << rp << '\n'
  28.     << *pp << '\n';
  29. }


Message édité par Taz le 15-03-2006 à 21:45:40
n°1326237
groskachou
Posté le 15-03-2006 à 21:47:40  profilanswer
 

Ok merci a toi pour ce code. J'avais trouvé aussi en faisant une simple fonction affiche.
Merci :)

n°1326254
Taz
bisounours-codeur
Posté le 15-03-2006 à 22:10:40  profilanswer
 

mais t'as pas du le faire bien (sans virtual, sans surcharge propre, sans const, etc)

n°1326258
groskachou
Posté le 15-03-2006 à 22:17:30  profilanswer
 

exact :D Rien de tout ca. Faudrait que je rajoute le virtual et le const dans mon cas de chat::affiche()
Faut que je vois encore comment fonctionne virtual. Haaa que c'est dur le passage java/c# à c++.
Merci quand meme de m'ouvrir les yeux sur mes oublis. C'est simpa :D

n°1326364
Taz
bisounours-codeur
Posté le 16-03-2006 à 00:18:09  profilanswer
 

groskachou a écrit :


Faut que je vois encore comment fonctionne virtual.


 
ok donc ta solution n'en ai pas une ...
 
 
et puis arrête tes bêtises avec classe::machin(). tu fais this->machin() et t'arrêtes de faire n'importe quoi. t'as rien bité au polymorphisme. fais  
 
Mammifère *m = new Chat();
cout << *m;
cout << m->GetType();
 
et pleure

n°1326421
groskachou
Posté le 16-03-2006 à 01:29:38  profilanswer
 

Classe::machin comme tu dis c'était l'un de mes nombreux test pour voir si ca marchait mais non...
J'aime pas trop le ton arrogant Taz... Je pense que certains connaissent mieux certains langages que d'autres et une simple explication aurait suffit pour que je comprenne.
Pour le moment j'ai vu ce qu'était la base canonique en c++ et je commence a passé à l'héritage. Le polymorphisme, c'est la prochaine étape.
Mais, en tout cas, un grand merci pour toutes vos précisions et vos conseils.


Message édité par groskachou le 16-03-2006 à 01:30:27
n°1326453
Taz
bisounours-codeur
Posté le 16-03-2006 à 08:07:39  profilanswer
 

y a pas d'héritage sans polymorphisme.

mood
Publicité
Posté le 16-03-2006 à 08:07:39  profilanswer
 

n°1427545
drayell
Posté le 18-08-2006 à 23:03:14  profilanswer
 

Taz tu connais pas endl ?

n°1427548
icareo
Posté le 18-08-2006 à 23:07:32  profilanswer
 

dis moi drayell ... visiblement tu fais un tour dans les archives ? T'as l'air d'upper des topics de plus en plus vieux... celui la a + de 5 mois !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Debutant] Heritage et appel de fonction

 

Sujets relatifs
[VB.NET] Trier treeview en fonction ImageIndexExecuter une fonction d'un script en VBScript
Résultat fonction PHP différentefonction cryptage et envoie dans mysql
Héritage et pluginAide débutant rêgle REGEXP
Allocation de tableau dans une fonctionQuestions diverses de débutant
Excel : Fonction? Programmation ? Macro ? Help me Please !!!!UML - Débutant en programmation - Recherche de conseils
Plus de sujets relatifs à : [Debutant] Heritage et appel de fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR