Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 76 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

C++ Classe virtuelle et héritage

 
n°13627
ramos
Qui s'y frotte s'y pique!!!
Profil : Jeune recrue
Posté le 10-06-2005 à 15:13:16  profilanswer
 

Bonjour,
 
Voila, j'ai un souci avec l'utilisation de méthodes virtuelles pures lors de leurs redéfinition dans une sous-classe. voici le code ainsi qu'une petite explication:
 
 
===========CLASSE MERE===========

Code :
  1. class A
  2. {
  3.   public:
  4.        
  5.   struct MaStruct
  6.   {
  7. char* ch1;
  8. char* ch2;
  9.   };
  10.   A();   //constructeur
  11.   virtual ~A();  //destructeur
  12.   virtual MaStruct* get_info() =0;   //méthode virtuelle pure non définie dans le .cpp
  13. };


================================================
 
 
===========CLASSE FILLE=========================

Code :
  1. class B
  2. {
  3.   public:
  4.        
  5.   struct MaStruct
  6.   {
  7. char* ch1;
  8. char* ch2;
  9.   };
  10.   B();   //constructeur
  11.   virtual ~B();  //destructeur
  12.   MaStruct* get_info();   //je veux ici renvoyer un tableau de structure
  13. };


================================================
 
Erreur générée: error C2555: 'B::get_info' : overriding virtual function differs from 'A::get_info' only by return type or calling convention D:\....\ClasseMere.h : see declaration of 'A'
 
 
En fait je veux ici redéfinir ma méthode virtuelle pure mais apparement il y a un problème avec la STRUCTURE MaStruct que je désire renvoyer puisque avec une méthode simple ex:

Code :
  1. virtual int mafonction() =0

j'arrive a la redéfinir en codant

Code :
  1. int mafonction();

dans la classe fille.
 
 
Si qqun pouvait m'aider, ce serait cool [:annatchoum].
 
PS : je code sous Visual C++ 6.


---------------
Les politiciens, c'est comme les couches des bébés; il faut les changer régulièrement, et ce, pour les mêmes raisons !
n°13671
P-Y
Profil : Vieux de la vieille
Posté le 13-06-2005 à 12:32:33  profilanswer
 

si B derive de A, deja faut mettre Class B: Public A et ensuite c'est pas la peine de redefinir la structure MaStruct dans B puisqu'elle herite de celle de A ;)

n°13677
ramos
Qui s'y frotte s'y pique!!!
Profil : Jeune recrue
Posté le 13-06-2005 à 15:16:53  profilanswer
 

Oui, je sais bien mais le problème c'est que lorsque j'enlève la déclaration de la structure dans la classe B (fille), j'ai une erreur lorsque j'essaye d'utiliser une fonction qui renvoie cette meme structure.
 
 
#include <fich_classA.h>
 
class B : public class A
{
  public:  
 
  B();   //constructeur
  virtual ~B();  //destructeur
 
  MaStruct* get_info();   //erreur à ce niveau
};
 
 
Sinon j'avais déjà essayer de mettre mes structures dans un autre ".h" mais le problème est toujours le même, je n'arrive pas à déclarer de fonction retournant une de ces structures sans qu'une erreur ne survienne.
 
Est-ce que je ne dois pas déclarer la structure que je souhaite retourner dans la classe concernée (celle qui contient la méthode qui devrait retourner cette structure)? Ce serai un truc dans ce genre :
 
 
===============================================
Strucure.h
 
struct MaStruct
  {
 char* ch1;
 char* ch2;
  };
 
 
 
 
 
MaClasse.h
 
class CMaClasse
{
  public:  
 
 
   NE DOIS-JE PAS DECLARER MA STRUCTURE ICI,  SI OUI, COMMENT?
 
         
  CMaClasse();   //constructeur
  virtual ~CMaClasse();  //destructeur
 
  virtual MaStruct* get_info() =0;   //méthode virtuelle pure non définie dans le .cpp et qui doit retourner ma fameuse structure ERREUR
};
================================================
 
Merci de bien vouloir m'aider
 


---------------
Les politiciens, c'est comme les couches des bébés; il faut les changer régulièrement, et ce, pour les mêmes raisons !
n°13678
ramos
Qui s'y frotte s'y pique!!!
Profil : Jeune recrue
Posté le 13-06-2005 à 15:33:35  profilanswer
 

C'est bon j'ai trouvé mon problème!!!!  
 
Je ne savais pas qu'il fallait ajouter le "=0" à la fin de la déclaration de la méthode redéfinie dans la classe fille....voilà tout
 
Je donne qd meme un exemple complet de la façon dont j'ai procédé :  
 
===========CLASSE MERE===========

Code :
  1. class A
  2. {
  3.   public:
  4.        
  5.   struct MaStruct
  6.   {
  7. char* ch1;
  8. char* ch2;
  9.   };
  10.   A();   //constructeur
  11.   virtual ~A();  //destructeur
  12.   virtual MaStruct* get_info() =0;   //méthode virtuelle pure non définie dans le .cpp
  13. };


================================================
 
 
===========CLASSE FILLE=========================

Code :
  1. class B : public A
  2. {
  3.   public:
  4.        
  5.   B();   //constructeur
  6.   virtual ~B();  //destructeur
  7.   MaStruct* get_info() =0 ;   //redéfinition de la méthode de la classe A
  8. };


================================================
 
 
 
 
 
Voilà et Merci a tous


---------------
Les politiciens, c'est comme les couches des bébés; il faut les changer régulièrement, et ce, pour les mêmes raisons !

Aller à :
Ajouter une réponse