Voilà les classes :
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
| //-----------------------------------------------------
//-------Operande.h (classe mère abstraite)
//------------------------------------------------------
// Méthode virtuelle pure (pas implémentée) pour appeler la bonne méthode addition dans une des classes filles.
virtual const Operande* addition(const Operande* op) const = 0 ;
//-----------------------------------------------------
//-------Reel.h (classe fille)
//------------------------------------------------------
virtual const Operande* addition(const Operande* op) const;
virtual const Operande* addition(const Reel* op) const;
virtual const Operande* addition(const Complexe* op) const;
virtual const Operande* addition(const Matrice* op) const;
//-----------------------------------------------------
//-------Reel.cpp
//------------------------------------------------------
const Operande* Reel::addition(const Operande* op) const
{
cout << "Je rebalance sur l'inconnu pour connaître le type" << endl;
return op->addition(this);
}
const Operande* Reel::addition(const Reel* op) const
{
cout << "Addition REEL + REEL" << endl;
return (new Reel(m_valeur + op->value()));
} |
------------------------------------------------------------------------
Quand on appelle la méthode addition sur une opérande => La résolution de type se fait bien puisque
la méthode
const Operande* Reel::addition(const Operande* op) const
est bien appelée.
Mais le problème, c'est que, lorsque on est dans cette méthode => il y a une récursivité inattendue
En effet, le
return op->addition(this);
rappelle cette même méthode donc Seg fault.
Moi je voudrais appeler évidemment
const Operande* Reel::addition(const Reel* op) const
.
Avez vous une idée svp là je sèche !
Partager