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 ?
Merci de votre aide
______________________
Adeon
[ Lien ]