[C++] Problème avec les fonctions virtuelles

Problème avec les fonctions virtuelles [C++] - C++ - Programmation

Marsh Posté le 18-02-2007 à 19:39:43    

Salut, j'utilise dans mon programme un vector qui contient plusieurs types d'objets issus d'une meme classe (class_mere) qui est abstraite. Pour la déclaration de ce vecteur j'utilise vector<class_mere*> objs;
 
Ces objets sont de classe class_a ou class_b ou class_c et on chacun des variables propres (qui ne sont pas dans les autres classes).
 
Le problème est le suivant : si je fais un appel à une variables qui appartient à une des classes héritées mais pas à la classe mère, par l'intermédiaire du tableau par exemple objs[0]->var_appartenant_que_a_class_a; le compilateur me renvoie que class_mere ne contient pas cette variable. Ainsi je ne sais pas comment accéder à cette variable.  
 
Merci d'avance
 
NC

Reply

Marsh Posté le 18-02-2007 à 19:39:43   

Reply

Marsh Posté le 18-02-2007 à 20:00:15    

1/ Définir des accesseurs et mutateurs pour cette variable
 
2/ Utiliser le mot-clé "virtual" devant ces derniers, dans les classes mères.

Reply

Marsh Posté le 18-02-2007 à 20:03:45    

heu ... après avoir chercher dans mon bouquin de c++, je n'ai pas trouvé ce qu'étaient des accesseurs et des mutateurs ... :(

Reply

Marsh Posté le 18-02-2007 à 20:09:42    

Tu sais ce que c'est, mais il est possible que tu les appelles autrement.
Getters ? Setters ?
 
accesseur ( qui permet l'accès ) :
 
int getMyInt() { return myInt; }
 
mutateur ( qui permet la modification ) ;
 
void setMyInt(int value) { myInt = value; }
 

Reply

Marsh Posté le 18-02-2007 à 20:12:56    

Je t'invite à jeter un oeil ici : http://www.nextgeneration.fr/cours [...] ritage.pdf
 
J'ai un cours sur les fonctions virtuelles qui est en cours de rédaction. Je te mets ça en ligne ce soir

Reply

Marsh Posté le 18-02-2007 à 20:14:56    

ok merci mais en ce moment ma connexion internet tourne a 2 a l'heure, la faute à ce maudit g data je crois, je regarderais ca demain,et je vous tiendrais au courant ;)

Reply

Marsh Posté le 18-02-2007 à 21:02:05    

Reply

Marsh Posté le 18-02-2007 à 23:00:31    

re, j'ai lu votre tutorial, mais cependant je n'ai pas trouvé la réponse à ma question, à moins d'avoir sauté une étape, mais je ne crois pas : je n'ai pas trouvé où vous parliez d'"accesseur" ou de "mutateur" (getters et setters ne me disent rien non plus) : vous parlez de fonctions virtuelles, mais mon problème n'est pas là, il est du aux variables qui ne sont pas dans la classe mere
:)

Reply

Marsh Posté le 18-02-2007 à 23:22:38    

Il faut que tu aies une méthode "virtual type getMaVar() const = 0;" dans la classe mère, que tu réimplémenteras dans les classes filles.
Ca te permettra d'appeller getMaVar() sur la classe mère, mais comme c'est une fonction virtuelle, la fonction rééllement appellée sera celle de l'instance réélle.
 
En gros, ThX t'a parlé de méthodes virtuelles et d'accesseurs/mutateurs, mais ce sont 2 notions indépendantes l'une de l'autre (mais utilisable conjointement bien sûr).

Reply

Marsh Posté le 19-02-2007 à 09:23:46    

ok j'ai compris :)
 
Mais si j'ai par exemple dans class_a deux variables en plus par rapport à la class mère, comment faire pour renvoyer les 2 ? définir deux fonctions ? autant avoir mis ces variables dans la classe mère alors !

Reply

Marsh Posté le 19-02-2007 à 09:23:46   

Reply

Marsh Posté le 19-02-2007 à 09:40:23    

t'as un problème de conception pas de code

Reply

Marsh Posté le 19-02-2007 à 10:27:51    

en fait j'ai trouvé comment faire ca, par contre je ne sais pas comment faire si les variables sont de type différents : comment faire pour que la même fonction, à partir de la valeur du paramètre qui lui est donné peut-elle changer le type de retour ?

Reply

Marsh Posté le 19-02-2007 à 11:26:54    

Dans ce cas, c'est clairement ce que dis Taz et quoi que tu fasses tu seras toujours dans un problème.

Reply

Marsh Posté le 19-02-2007 à 11:35:09    

A (re)lire : Classes et objets

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed