IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

classe fraction : operator- (moins unaire)


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 36
    Points : 15
    Points
    15
    Par défaut classe fraction : operator- (moins unaire)
    Bonjour,

    j'ai une classe permettant de gérer des fractions (appelée ZFraction) et j'ai du mal à comprendre la définition de l'opérateur moins unaire ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ZFraction operator-(ZFraction const& a)
    {
        ZFraction copie(a);
        copie*=-1; // ici je ne comprends pas 
        return copie;
    }
    Auparavant on a défini l'opérateur *= , méthode de la classe ZFraction, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ZFraction& ZFraction::operator*=(const ZFraction& a)
    {
        m_num*=a.m_num;
        m_den*=a.m_den;
        reduire();
     
        return *this;
    }
    Ce qui voudrait dire que -1 est considéré comme fraction?

    Merci pour vos éclaircissements.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    bonjour,
    il est possible qu'on ait défini une conversion des entiers vers les fractions (ce qui se fait en définissant un constructeur de fraction prenant un entier en argument). Ça ne paraît pas absurde à priori, puisque on peut exprimer un entier n par n'import quelle fraction telle que num=denom*n.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ou alors tu as une autre surcharge de l'operator*= qui prend un entier.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Bonjour Therwald, je ne comprends pas ce que tu as écrit :
    on peut exprimer un entier n par n'import quelle fraction telle que num=denom*n.
    à mon avis si n est un entier, sa conversion en fraction est telle que son numérateur vaut n et son dénominateur vaut 1.

    Bonjour Bousk, tu as écrit :
    Ou alors tu as une autre surcharge de l'operator*= qui prend un entier.
    Je n'ai que l'opérateur*= dont l'ai donné la définition au premier message.

    Par contre, j'ai un constructeur 3 en 1 défini comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ZFraction::ZFraction(int num,int den):m_num(num),m_den(den)
    {
        if (m_den==0)
        {
            std::cout<<"Erreur : division par 0"<<std::endl;
            exit(EXIT_FAILURE);
        }
     
        signe();//Méthode interne de la classe ZFraction pour ramener le signe au numérateur
        reduire();//Méthode interne de la classe ZFraction pour rendre une fraction irréductible
     
     
    }
    Ce constructeur peut prendre soit 0, soit 1, soit 2 arguments.
    D'ailleurs si j'écrit copie*=ZFraction() ou copie*=ZFraction(1), ou ZFraction(1,2), il construit la ZFraction et effectue le calcul en conséquence.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Citation Envoyé par sgu35
    Bonjour Therwald, je ne comprends pas ce que tu as écrit :
    Citation Envoyé par therwald
    on peut exprimer un entier n par n'import quelle fraction telle que num=denom*n.
    1) n/1 est une fraction, car personne n'a dit que le dénominateur 1 est interdit.
    2) n/1 est la fraction réduite, mais 2n/2 est tout aussi valide...
    Mon propos, c'est que comme tout an/a avec a!=0 est une fraction valide qui a la même valeur que l'entier n, alors la conversion de tout entier n en une fraction de la forme an/a est valide et permet de construire une fraction à partir de n et faire des opérations avec.
    Donc c'est sémantiquement valable, et techniquement s'il existe un constructeur de ta classe de fraction qui peut accepter un entier unique en entrée il sera automatiquement appliqué pour faire la conversion, sauf si tu as refusé cette conversion en appliquant le mot-clef explicit au constructeur.
    la définition de constructeur que tu montres ne permet pas de savoir si le constructeur acceptera un entier unique en argument, je suppose que la déclaration est du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZFraction::ZFraction(int num=0,int den=1);

Discussions similaires

  1. Réalisation d'une classe Fraction
    Par Ninalou dans le forum Général Java
    Réponses: 3
    Dernier message: 28/02/2011, 16h53
  2. Probleme sur ma classe Fraction
    Par Nono Sto dans le forum Langage
    Réponses: 12
    Dernier message: 25/11/2009, 14h05
  3. Réponses: 1
    Dernier message: 05/11/2009, 11h14
  4. Classes et Operations
    Par Pierre L. dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 13/04/2009, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo