[C/C++] Polymorphisme : passer en paramètre un élément de type dérivé

Le côté programmation du développement d'un jeu vidéo.

Polymorphisme : passer en paramètre un élément de type dérivé

Messagepar Nieluj » 20 Sep 2011, 19:57

Salut

Bon ça devient une habitude en ce moment mais j'ai encore une question... Comme d'hab, je ne viens pas demander la solution avant d'avoir cherché bien entendu. Ca concerne le polymorphisme.

On a :

Code: Tout sélectionner
class A
{
    fa( A* a );
};

class B: public A
{
   
};

class C: public A
{

};


Pouvez vous me confirmer qu'il est possible de faire :

Code: Tout sélectionner
C* c = new C();

fa( c );


Je sais qu'en actionscript je n'avais aucun soucis pour faire ce genre de chose mais là j'ai des doutes en c++ malgré que ça me paraisse évident...

Merci pour votre aide !
Avatar de l’utilisateur
Nieluj
Hello World, I'm new !
 
Messages: 110
Inscription: 27 Oct 2009, 14:11

Messagepar teto » 20 Sep 2011, 20:40

C'est possible. Par contre il faudra mettre un "public:" avant fa et appeler fa depuis une instance, par exemple:

Code: Tout sélectionner
c->fa(c) ; //!< Ok l'exemple est bizarre mais ca compile :p
Avatar de l’utilisateur
teto
 
Messages: 1168
Inscription: 26 Juil 2005, 19:02
Localisation: /home/Paris

Messagepar Nieluj » 20 Sep 2011, 21:54

tu veux dire public: devant la déclaration ?

Parce que ça ne change strictement rien : invalid conversion from `Weapon*' to `int'

Il me met ce message car j'ai une surcharge de méthodes. Une méthode attend un int l'autre un PhysicObject*. Comme je passe un Weapon* ( qui dérive pourtant de PhysicObject ), il semble ne pas la reconnaitre en tant que PhysicObject et prend la première méthode qui est celle avec le int d'où ce message...

Sinon quand tu parles d'instance, étant donné que l'appel de fa() se fait à partir de C, ceci conviendrait :

Code: Tout sélectionner
B* b = new B();  //Je me suis planté dans mon exemple c'était B :(
this->fa( b );
Avatar de l’utilisateur
Nieluj
Hello World, I'm new !
 
Messages: 110
Inscription: 27 Oct 2009, 14:11

Messagepar teto » 20 Sep 2011, 23:48

File plus de code, ta répartition de header etc... parce que là on ne sait pas si le code est faux parce que tu simplifies ou si c'est vraiment faux. Tu utilises mingw (avec codeblocks j'imagine).
Avatar de l’utilisateur
teto
 
Messages: 1168
Inscription: 26 Juil 2005, 19:02
Localisation: /home/Paris

Messagepar Kremtak » 24 Sep 2011, 13:35

Ouaip, comme dit teto, ça ressemble plus à un header pas inclus là où il faudrait...
But there's no sense crying over every mistake
You just keep trying until you run out of cake
Avatar de l’utilisateur
Kremtak
Hello World, I'm new !
 
Messages: 167
Inscription: 12 Déc 2007, 23:27
Localisation: Aubagne


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 13 invités

cron