Non, sauf si tu prévois un pointeur pour "remonter". Et attention, tu stockes un pointeur vers CFP, pas une instance directement![]()
Non, sauf si tu prévois un pointeur pour "remonter". Et attention, tu stockes un pointeur vers CFP, pas une instance directement![]()
AAAH ok.
On stocke un pointeur et pas une instance? Pourquoi?
Là du coup je vais devoir créer un max de méthode dans Choc pour remplir mes champs de CFP !
Quand on stocke un pointeur comme ça, quels sont les droits d'accès (private, protected, public) vers là ou on pointe ?![]()
Tu ne pourras pas stocker une instance de CFP puisqu'en tant que telle, elle n'existe pas, c'est un composant abstrait, c'est l'antenne qui sera quelque chose, et pour accéder à une antenne à travers un CFP, il va te falloir un pointeur.
Ok d'accord, je commence à comprendre !![]()
1) Dans l'hypothèse où CFG serait seul, sans classes filles. Pourrait-on stocker directement l'instance dans choc ?
2)Donc, on ne peut pas créer d'objet CFP? Il faudra passer obligatoirement par les classes filles (j'ai fait un peu de java avant donc... c'est un peu différent je pense) ?c'est l'antenne qui sera quelque chose
3) Vu que CFP est une classe abstraite, faut-il la déclarer comme abstract (comme en java)?
Merci bcp bcp pour ton aide !![]()
1) oui
2) Exact, comme en Java, on ne peut pas créer de classe dont une fonction est virtuelle pure/abstraite
3) non, ce sont les méthodes qui sont virtuelles pures.
OK d'accord! De fils en aiguilles, je progresse !![]()
Ce sont donc les méthodes à déclarer comme virtuelles pures. Lorsqu'on les déclare comme telles, faut-il leur donner une implémentation? i.e on déclare quand même les méthodes, et la méthode fille appelle la méthode mère ?
Comment ça se passe en C++?
Virtuelles pures = virtuelles pures, s'il y a une implémentation, elles sont virtuelles.
Si tu veux appeler la méthode mère, c'est ton choix.
Au fait, pourquoi implémenter des méthodes virtuelles pures?![]()
Ne peut-on pas déclarer les fonctions membres normalement?
Elles doivent au moins être virtuelles si tu veux appeler les fonctions de la classe fille àç partir de la classe mère, mais pour ça, je te conseille d'aller voir la FAQhttp://c.developpez.com/faq/cpp/?pag...LASS_abstraite
Pour moi, de la classe mère dérive deux classes : LPT et Antenne. La classe mère (CFP) va définir un ensemble de méthodes, certaines reprises par les classes filles.
Effectivement, comme dans la FAQ, il est possible (mais pas encore sur!) que certaines fonctions bien différentes pour CFP et Antenne, aient besoin d'une redéfinition! -> Dans ce cas, méthode virtuelle pure ?
Question : si on définit une méthode calculer() dans CFP, est-ce qu'on peut modifier cette fonction? i.e donner une nouvelle implémenation sans changer les arguments? Peut-on surchager cette fonction ?
Ca fait bcp de questions!![]()
Merci...![]()
C'est sûr, tu auras des méthodes dans CFP qui seront génériques aux CFP, mais les autres, qui sont des particularités des 2 composants - je ne sais pas, par ex la température de je ne sais quoi -, seront des fonctions virtuelles pures dans la classe mère.
Si tu as une fonction dans CFP qui s'appelle calculer, tu peux redéfinir cette fonction dans la classe fille, mais si elle n'est pas virtuelle dans la classe mère, elle ne sera jamais appelée. Si tu surcharges la fonctiond ans la classe fille, c'est une autre fonction, il te faudra tout de même définir la première.
A ce sujet, j'ai lu la FAQEnvoyé par Miles
http://c.developpez.com/faq/cpp/?pag...NITION_virtual
Mais je dois avouer que j'ai pas tout compris... Le virtual permet d'appeler la fonction dans la classe fille, sinon c'est la fonction "mère" qui est appelée c'est ça ???![]()
Tu as un pointeur de type Mere* que tu as rempli avec un new Fille();
Si tu accèdes aux méthodes déclarées dans Mere - les seules pouvant être appelées puisque tu as un pointeur de type Mere* - sans qu'elles soient virtuelles, tu appelles les fonctions de la classe mère, tu n'as aucun moyen d'accéder à la classe fille. E revanche, si les fonctions sont virtuelles, tu accèdera aux fonctions de la classe fille.
Salut !
OK j'ai bien compris... De plus, je viens de potasser un bouquin de C++ là dessus, j'y vois plus clair!
Par contre, voici une question plus embetante pour moi:![]()
Pour implémenter une fonction du genre "is_readable (std::string &file)", comme celà est fait dans la FAQ, faut-il créer une classe fichier (pour rester dans l'esprit de la POO), ou bien alors le laisser comme une fonction, et donc créer un fichier outils.cpp où tous ces petits test seront implémentés (moins propre ???)![]()
Merci !
Les 2 se défendent, mais je préfèrerais les fonctions libres qu'une classe![]()
OK super, je vais donc pas le mettre dans une classe, j'ai déjà assez de problèmes avec le reste!
Il faut bien le dire, je suis bientôt près de la solution, mais j'hésite encore sur l'architecture globale de mon programme!
Voici où j'en suis (pièce jointe).
Ma question est la suivante:
litCorrespondanceCameraNumero() a besoin de deux paramètres pour fonctionner : nom_composant, et fichier_camera_numero. Elle doit remplir le champ numero_cam dans la classe Camera.
Est-ce possible d'effectuer cette opération avec ce schéma là?![]()
Je n'ai pas trop d'idée comment remplir, c'est à dire comment accéder aux variables des autres classes proprement(peut-être par amitié ?)
Merci beaucoup:![]()
Une série de set/get ?
Oui, mais les variables ne sont pas dans la classe ? Je ne peux donc pas faire un simple get ? (cf pièce jointe)
Ma question est donc : comment accéder aux classes par composition? L'amitié est - elle dans mon cas un bon moyen (cf schéma ?)
Tu me parlais de pointeurs pour "remonter" ?
Voici un exemple concret de mon problème :
En rouge sur le schéma de la pièce jointe, une fonction get qui doit aller chercher une variable dans une autre classe: la classe CFP.
Est-ce que la déclaration friend est bien adaptée?
Merci Miles!![]()
Attends, qu'est-ce que tu fais ? C'est dans Choc qu'il y a la fonctionq ue tu veux appeler, non ? Pourquoi ne peut-elle pas chercher dans ses variables CFP les données que tu veux ?
Partager