1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include <iostream>
class base
{
int paramCommun;
public:
base() : paramCommun(5)
{}
virtual int funcCommune(void)
{
return paramCommun;
}
};
class enfantA : public base
{
int paramPasCommun;
public:
enfantA() : base(), paramPasCommun(10)
{}
virtual int funcCommune(void)
{
return paramPasCommun;
}
};
struct autreOBJ
{
base * funtion_retour_base()
{
enfantA * pObjectA = new enfantA();
return pObjectA; // L'objet objectA est tronqué et "paramPasCommun" est perdu !
}
};
int main(int argc, char* argv[])
{
enfantA enfantNormal;
std::cout << enfantNormal.funcCommune() << std::endl; // Affiche 10 comme prévu
autreOBJ obj;
base * pAutreEnfant = obj.funtion_retour_base();
if(pAutreEnfant)
{
std::cout << pAutreEnfant -> funcCommune() << std::endl; // Affiche 10, ce qui est correct
delete pAutreEnfant; // On libère la mémoire
pAutreEnfant = 0;
}
} |
Partager