Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[debutant] clase derivé

4 réponses
Avatar
Jomanix
Bonjour

j'ai une méthode dans ma classe principale déclaré comme suit:

virtual void evolve()=0;

Je voudrais juste savoir si quand je la redeclare dans mes classes derivés
je pouvait lui ajouter des arguments.

Merci d'avance

4 réponses

Avatar
Matthieu Moy
"Jomanix" writes:

Je voudrais juste savoir si quand je la redeclare dans mes classes derivés
je pouvait lui ajouter des arguments.


Tu « peux », mais ça sera considéré comme une autre fonction, qui
écrasera celle de la classe de base. A priori, ce n'est pas ce que tu
veux.

Sinon, comment le programme pourrait-il « deviner » quels arguments
donner au moment de la résolution de la surcharge de

ptr->evolve();

appelé sur un objet de la classe dérivée ?

--
Matthieu

Avatar
Jomanix
Merci beaucoup de plus je l'ai compris en voyant les methodes dont je
disposais.

Une autre préision SVP.
cette methode fait partie d'une classe world dont je n'ai que le header.

//methode permettant de positioner un element dans le monde
//Nb: si un element se trouvait a cet endroit il est detriut
void setElemtnAt(unsigned int row, unsigned int col,Element* elt=Null);

element etant une autre classe dont je n'ai que le header

au momnet de l'appel:
ptr_element->setElementAt(ligne,colonne,??????????)

je ne sais que mettre en troisieme argument.
La methode va sans doute positionner mon element courant a la nouvelle
position mais a quoi sert le troisieme argument?que signifie t'il?.

Merci

"Matthieu Moy" a écrit dans le message
de news:
"Jomanix" writes:

Je voudrais juste savoir si quand je la redeclare dans mes classes
derivés
je pouvait lui ajouter des arguments.


Tu « peux », mais ça sera considéré comme une autre fonction, qui
écrasera celle de la classe de base. A priori, ce n'est pas ce que tu
veux.

Sinon, comment le programme pourrait-il « deviner » quels arguments
donner au moment de la résolution de la surcharge de

ptr->evolve();

appelé sur un objet de la classe dérivée ?

--
Matthieu



Avatar
kanze
Jomanix wrote:

//methode permettant de positioner un element dans le monde
//Nb: si un element se trouvait a cet endroit il est detriut
void setElemtnAt(unsigned int row, unsigned int col,Element*
elt=Null);


element etant une autre classe dont je n'ai que le header

au momnet de l'appel:
ptr_element->setElementAt(ligne,colonne,??????????)

je ne sais que mettre en troisieme argument.


L'adresse d'un élément, ou NULL (qui est le défaut, c-à-d que tu
n'as pas besoin de le spécifier, si c'est ça que tu veux).

La methode va sans doute positionner mon element courant a la
nouvelle position mais a quoi sert le troisieme argument?que
signifie t'il?.


Je ne comprends pas le « sans doute ». Qu'est-ce que sa
spécification dit qu'elle fasse ? (Surtout, qu'est-ce qu'elle
dit au sujet du troisième paramètre NULL ?)

A priori, tu dois avoir des éléments quelque part ; tu lui
passes l'adresse de ton élément courant, si c'est ça l'élément
que tu veux positionner.

Mais je démanderais bien quelle est la signification d'un NULL
comme troisième paramètre. C'est une question fondamentale ici.
(Si, par exemple, le monde maintient un élément courant, et que
NULL signifie utiliser cet élément courant, et c'est ça que tu
veux, tu n'as pas besoin de lui passer de troisième paramètre du
tout. Mais cette idée n'est que de la spéculation pûre de ma
part, tant que je n'aurais pas vu la spécification des classes
en question.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
kanze
Matthieu Moy wrote:
"Jomanix" writes:

Je voudrais juste savoir si quand je la redeclare dans mes
classes derivés je pouvait lui ajouter des arguments.


Tu « peux », mais ça sera considéré comme une autre fonction,
qui écrasera celle de la classe de base. A priori, ce n'est
pas ce que tu veux.


Écraser, ce n'est peut-être pas le mot qui convient. C'est une
autre fonction, comme tu dis, sans rapport avec la fonction dans
la classe de base, qui cache la fonction dans la classe de
base si on accède par l'interface de la classe dérivée, mais qui
n'est pas accessible depuis l'interface de la classe de base.

Dans la mesure où la fonction dans la classe de base était
virtuelle pûre, la classe dérivée reste abstraite, aussi.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34