Problème avec les fonctions virtuelles [C++] - C++ - Programmation
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.
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 ...
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; }
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
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
Marsh Posté le 18-02-2007 à 21:02:05
Chose promise...
http://www.nextgeneration.fr/cours [...] uelles.php
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
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).
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 !
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 ?
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.
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