j'étais en train de bosser un exam d'info.
Et je tombe sur ce cas :
class Vehicle
{
public:
int year;
void Test()
{
printf("Year %d \n",year);
}
};
class Moto : public Vehicle
{
public:
int speed;
void affiche()
{
printf("Speed %d \n",speed);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Vehicle* vehicle = new Vehicle();
vehicle->year = 2005;
Moto* moto = (Moto*)vehicle;
moto->speed = 120;
moto->affiche();
printf("Moto : 0x%p \n",moto);
printf("speed : 0x%p \n",&moto->speed);
return 0;
}

Je créer un Vehicle, que je supposais allouer un objet de type Vehicle, donc avec seulement la variable year.
Que ce passe t-il en interne alors lorsque je cast le (Vehicle*) en tant que (Moto*) ?
Comment se fait-il que je puisse utiliser la variable speed? et la fonction affiche?
J'aurais pensé que comme j'ai créer un objet de type Vehicle, alors la variable speed n'est pas alloué en mémoire.
Message édité le 18 décembre 2016 à 13:19:23 par Pseudo supprimé