cs_Adeon
Messages postés293Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention10 avril 2015
-
4 août 2007 à 19:18
cs_bissss
Messages postés1Date d'inscriptionmardi 19 décembre 2000StatutMembreDernière intervention20 août 2008
-
20 août 2008 à 23:03
Je pense avoir tout compris sur les classes sauf un petit point. le voici :
Considerons ces 3 classes :
class Vehicule
{
float VitesseMoyenne;
bool 1Avion0Voiture; //=true si c'est un avion, =false si c'est une voiture
void SetInfo(Vehicule* VehiculeToSet);
};
class Avion : public Vehicule
{
float altitude;
};
classe Voiture : public Vehicule
{
int NbVitesse;
};
Bon c'est très shématique mais c'est plus facil a comprendre !
Tout le monde a une vitesseMoyenne.
l'information altitude est spécifique a l'avion.
l'information NbVitesse est spécifique a la voiture.
Maintenant imaginons la fonction SetInfo(Vehicule* VehiculeToSet) qui doit, pour une raison quelconque, quand elle est appelée, regler l'altitude a 10000 si son argument est un avion ou regler le nombre de vitesse a 5 si c'est une voiture.
Je la fabriquerai comme cela :
void Vehicule::SetInfo(Vehicule* VehiculeToSet)
{
if ( VehiculeToSet->1Avion0Voiture ) { ((Avion*)VehiculeToSet)->altitude = 10000; }
else { ((Voiture*)VehiculeToSet)->NbVitesse = 5; }
}
Je me dit que l'argument est du type Vehicule et que par conséquant toucher a autre chose que les variables de vehicule est prohibé. Pourtant, pas d'erreur dans la compilation, a priori, ca marche Mais est-ce juste ? Si non comment corriger la fonction ?
dletozeun
Messages postés546Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention 9 janvier 20081 4 août 2007 à 20:05
Salut,
Je connais pas parfaitement le c++, mais ce que tu as ecris ne me choque pas vu que dasn ta fonction SetInfo tu castes VehiculeToSet vers un type de classe dérivé de la classe Vehicule. Or Avion ou Voiture n'est q'une classe Vehicule avec des choses en plus....donc je vois pas de difficulté a convertir un objet de type Vehicule en un objet de type Avion ou Voiture, aucune donnée n'est perdue. Par contre il me semble que C++ interdit l'inverse.
Sinon ta fonction SetInfo sert à rien si tu la rend pas public.
caiman125
Messages postés36Date d'inscriptionmercredi 27 décembre 2006StatutMembreDernière intervention25 novembre 2010 5 août 2007 à 02:35
SALUT
tu peut declarer setinfo comme virtuel et puit tu la declare dans chaque classe fille sant acceder au variable de la classe pour savoire le type de vehicule
dletozeun
Messages postés546Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention 9 janvier 20081 5 août 2007 à 14:02
caiman125, oui ca semble etre la meilleure solution...
Adeon, ne prends pas en compte ce que je viens de dire plus haut, je crois que c'est faux, prends comme moi un bon cours de C++ pour comprendre ça ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 5 août 2007 à 18:17
Cast de mère vers fille à éviter comme la peste.
Au fait un truc : les variables pour identifier le type de classe, c'est un peu maladroit et contraire aux principes de la POO. Dans ton cas, c'est un exemple type de l'utilisation de l'héritage (virtuel).