[C++] surcharge fonction

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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 !!
A voir également:

2 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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   Statut Contributeur Dernière intervention   1 299
 
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