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 :

[POO] Fraction et constructeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut [POO] Fraction et constructeur
    Bonjour,

    j'essaye de créer une classe fraction pour additionner, multiplier, et comparer (égal, plus grand, plus petit) des fractions.
    Mais j'ai pas mal de problèmes:
    -Mon compilateur considere mon constructeur comme une fonction. Et du coup je ne peut rien faire.
    -J'ai crée des valeurs de base pour mon constructeur, mais impossible d'en initialiser une seul (il demande 2 arguments obligatoirement).

    Main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <iostream>
    #include <string>
    #include "Zfraction.h"
     
    using namespace std;
     
    int main()
    {
     
        Zfraction a(4,5);      //Déclare une fraction valant 4/5
        Zfraction b(2);        //Déclare une fraction valant 2/1
        Zfraction c,d;         //Déclare deux fractions valant 0/1
     
    return 0;
    }
    Zfraction.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include "Zfraction.h"
     
     
    Zfraction::Zfraction()
    {
        m_numerateur = 0;
        m_denominateur = 1;
    }
     
    Zfraction::Zfraction(int numerateur, int denominateur)
    {
        m_numerateur(numerateur);
        m_denominateur(denominateur);
    }
    Zfraction::Zfraction(int numerateur)
    {
        m_numerateur(numerateur);
        m_denominateur = 1;
    }
     
    Zfraction::int pgcd(int a, int b)
    {
        while (b != 0)
        {
            const int t = b;
            b = a%b;
            a=t;
        }
        return a;
    }

    Zfraction.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #ifndef ZFRACTION_H_INCLUDED
    #define ZFRACTION_H_INCLUDED
    #include <iostream>
     
    class Zfraction
    {
    public:
        Zfraction();
        Zfraction(int numerateur, int denominateur);
        Zfraction(int numerateur);
        int pgcd(int a, int b);
     
    private:
        int m_numerateur;
        int m_denominateur;
    };
     
    #endif // ZFRACTION_H_INCLUDED
    C'est peut être simple mais ca fait quelque jours que je programme plus j'ai peut être oublier quelque bases.
    En tout cas merci a vous !

  2. #2
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par Garwan50 Voir le message
    Bonjour,

    j'essaye de créer une classe fraction pour additionner, multiplier, et comparer (égal, plus grand, plus petit) des fractions.
    Mais j'ai pas mal de problèmes:
    -Mon compilateur considere mon constructeur comme une fonction. Et du coup je ne peut rien faire.
    -J'ai crée des valeurs de base pour mon constructeur, mais impossible d'en initialiser une seul (il demande 2 arguments obligatoirement).

    Main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <iostream>
    #include <string>
    #include "Zfraction.h"
     
    using namespace std;
     
    int main()
    {
     
        Zfraction a(4,5);      //Déclare une fraction valant 4/5
        Zfraction b(2);        //Déclare une fraction valant 2/1
        Zfraction c,d;         //Déclare deux fractions valant 0/1
     
    return 0;
    }
    Zfraction.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include "Zfraction.h"
     
     
    Zfraction::Zfraction()
    {
        m_numerateur = 0;
        m_denominateur = 1;
    }
     
    Zfraction::Zfraction(int numerateur, int denominateur)
    {
        m_numerateur(numerateur);
        m_denominateur(denominateur);
    }
    Zfraction::Zfraction(int numerateur)
    {
        m_numerateur(numerateur);
        m_denominateur = 1;
    }
     
    Zfraction::int pgcd(int a, int b)
    {
        while (b != 0)
        {
            const int t = b;
            b = a%b;
            a=t;
        }
        return a;
    }

    Zfraction.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #ifndef ZFRACTION_H_INCLUDED
    #define ZFRACTION_H_INCLUDED
    #include <iostream>
     
    class Zfraction
    {
    public:
        Zfraction();
        Zfraction(int numerateur, int denominateur);
        Zfraction(int numerateur);
        int pgcd(int a, int b);
     
    private:
        int m_numerateur;
        int m_denominateur;
    };
     
    #endif // ZFRACTION_H_INCLUDED
    C'est peut être simple mais ca fait quelque jours que je programme plus j'ai peut être oublier quelque bases.
    En tout cas merci a vous !
    ton constructeur n'est pas bon il est par defaut pour faire se que tu veut il faut faire Zfraction(int , int) la sa devrai marcher ou sinon il faut dans le main faire Zfraction a(): puis dans ton Zfrction.cpp Zfraction::Zfraction(): valeur(4), valeur2(5). enfin a toi de voir


    edit: desoler je vien de voir les autre constructeurs

  3. #3
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    tien essaye comme sa moi sa marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include "Zfraction.h"
     
     
    Zfraction::Zfraction()
    {
        m_numerateur = 0;
        m_denominateur = 1;
    }
     
    Zfraction::Zfraction(int numerateur, int denominateur)
    {
        m_numerateur = numerateur;
        m_denominateur = denominateur;
    }
    Zfraction::Zfraction(int numerateur)
    {
        m_numerateur = numerateur;
        m_denominateur = 1;
    }
     
    int Zfraction::pgcd(int a, int b)
    {
        while (b != 0)
        {
            const int t = b;
            b = a%b;
            a=t;
        }
        return a;
    }

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    initialisation et affectation ne sont pas les mêmes opérations

    La bonne marche à suivre est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Zfraction::Zfraction(int numerateur, int denominateur):
        m_numerateur(numerateur),
        m_denominateur(denominateur)
    {
    }

  5. #5
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par leternel Voir le message
    initialisation et affectation ne sont pas les mêmes opérations

    La bonne marche à suivre est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Zfraction::Zfraction(int numerateur, int denominateur):
        m_numerateur(numerateur),
        m_denominateur(denominateur)
    {
    }

    oops autant pour moi la methode que je t'ai donné sont des setter la bonne methode et celle d'eternel si jamais tu veut initialiser désoler

  6. #6
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Merci quand meme devdeb .

    Et merci Leternel, je penser que c'était deux méthodes qui était possible, mais visiblement il n'y en a qu'une :p.

    Et est ce que je suis obligé de créer trois constructeur pour trois cas de figure (soit un constructeur de base, un constructeur avec deux arguments, et un constructeur avec un argument) ou il y a une autre possibilités ?

    Et j'ai un soucis avec le PGCD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zfraction::int pgcd(int a, int b)
    18|error: expected unqualified-id before 'int'|
    dans le header c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int pgcd(int a, int b);

  7. #7
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par Garwan50 Voir le message
    Merci quand meme devdeb .

    Et merci Leternel, je penser que c'était deux méthodes qui était possible, mais visiblement il n'y en a qu'une :p.

    Et est ce que je suis obligé de créer trois constructeur pour trois cas de figure (soit un constructeur de base, un constructeur avec deux arguments, et un constructeur avec un argument) ou il y a une autre possibilités ?

    Et j'ai un soucis avec le PGCD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zfraction::int pgcd(int a, int b)
    18|error: expected unqualified-id before 'int'|
    dans le header c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int pgcd(int a, int b);
    int pgcd est declarer dans ton Zfraction ou pas ?

  8. #8
    Membre éclairé Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Par défaut
    Citation Envoyé par Garwan50 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zfraction::int pgcd(int a, int b)
    deja sa c'est plutot sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int Zfraction::pgcd(int a, int b)

  9. #9
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Citation Envoyé par Garwan50 Voir le message
    Et est ce que je suis obligé de créer trois constructeur pour trois cas de figure (soit un constructeur de base, un constructeur avec deux arguments, et un constructeur avec un argument) ou il y a une autre possibilités ?
    Il y a les arguments par défaut, ici, ca donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Zfraction::Zfraction(int numerateur = 0, int denominateur = 1):
        m_numerateur(numerateur),
        m_denominateur(denominateur)
    {}
    pour le PGCD, devdeb91 t'as répondu.
    :: est le séparateur dans les "chemins de nommage"

    l'analogie avec les répertoires serait la suivante:
    chaque namespace et chaque classe/structure introduit un dossier. Techiquement parlant, les variables locales sont définies en dehors de ces considérations.

    Chaque identifieur possède un nom complet, mais les mots clés en sont exclus. int n'a pas de nommage, tandis que std::string si.

    dans ton cas, pgcd appartient à la classe Zfraction du namespace global
    le nom complet est donc "::Zfraction::pgcd", qui peut aussi se nommer de manière relative (au namespace globale) "Zfraction::pgcd"

    Cette notion de nom relatif est importante quand il y a des "using namespace".
    Le nom relatif est cherché parmi chaque namespace ayant subit un using, tandis que le nom complet est cherché uniquement dans le namespace global

  10. #10
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par Garwan50 Voir le message
    Merci quand meme devdeb .

    Et merci Leternel, je penser que c'était deux méthodes qui était possible, mais visiblement il n'y en a qu'une :p.
    Les deux méthodes sont possibles, mais elles ne se comportent pas de la même manière. Leur sémantique est différente : la méthode présentée par leternel initialise (construit) les données membres ; la méthode que tu utilises les affecte, après leur initialisation par défaut. Sur des entier, la différence est minime. Dans le cas où on doit initialiser des données plus complexes (un std::string par exemple) alors le coût n'est pas du tout le même.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] héritage de constructeurs
    Par benkunz dans le forum Langage
    Réponses: 2
    Dernier message: 03/04/2007, 15h29
  2. [POO]Probléme de constructeur virtuel surchargé
    Par Laurent Dardenne dans le forum Delphi
    Réponses: 10
    Dernier message: 15/08/2006, 12h19
  3. [POO] Surcharge de constructeur
    Par loganblack dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2006, 12h26
  4. [POO] surcharger le constructeur
    Par wdionysos dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 15h42
  5. [POO]héritage du constructeur de la classe parente
    Par new_wave dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2006, 14h25

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