[C++] surcharge fonction

Fermé
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 23 mars 2006 à 10:19
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 27 mars 2006 à 16:29
Bonjour.
Voila, j'ai créer une class "complexe".
J'ai définie la fonction "complexe log(complexe)"
qui surcharge "double log(double)".
J'ai aussi le constructeur "complexe::complexe(double)"
Mon problème est le suivant:
je fait :
double A=5;double B=log(A);
Et le compilateur apel la fonction log(complexe) et non log(double)
je ne comprend pas pourquoi. ça pose un problème car il n'y a pas d'opérateur de complexe vers double.
A l'aide !!

2 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
23 mars 2006 à 21:34
Il faut utiliser le mot clé virtual très probablement, pour faire le lien dynamique. Mais bon ca me semble un peu tiré par les cheveux comme héritage... Pour moi il suffit juste de faire :
class complexe{
   protected:
   double re;
   double im;

   public:
   complexe(double re0,double im0):re(re0),im(im0){}
   inline get_re() const {return re;}
   inline get_im() const {return im;}

   inline complexe operator +(const complexe & x) const{
      return complexe(re+x.get_re(),im+x.get_im());
   }
   //...
};

double log(double d){
  //...
}

complexe log(const complexe & c){
  //...
}


Bonne chance
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
27 mars 2006 à 16:29
Merci/
en fait, j'ai trouver le problème, je n'avai pas inclu <cmath> dans la source, et donc seul "complexe log(complexe)" était déclarer.
l'ajoue de l'include <cmath> a résolue le problème.
Dans tout les cas, je trouve ça dommage qu'il n'y ai pas un façon d'apeler explicitement une fonction plutot qu'une autre.
0