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 :

Un objet peut-il comprendre une ou des valeurs.


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut Un objet peut-il comprendre une ou des valeurs.
    Bonjour lors de la mise en oeuvre de la solution d'un exercice, j'ai cru utile d'écrire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int Vecteur2D::calculeEtAffichage()
    {
      v3 operator+(v1, v2)
    }
    dans le code source. or j'ai définit v1, v2 et v3 en tant qu'objet. Pouvez-vous me dire sans me donner l'intégralité de la réponse si je dois changer la valeur de variables (sans doutes déclarés dans la classe) ou si cela est faisable avec un objet. Dans le'échéance du dumblicite hypothétisme , le nomdu mot clef auquel on doit les substituer. Merci.

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Points : 167
    Points
    167
    Par défaut
    Je suis tenté de dire que tu as la moitié du début de la solution .

    Bon plus sérieusement et en essayant de ne pas te donner la solution. Ce qu'il faut retenir c'est que le but de l'exercice et l'utilisation de la surcharge d'opérateur, ce que tu ne fais pas ici. Ici tu créés une méthode de calcul alors qu'il faut créer une surcharge d'opérateur. Dans le fond cela n'est pas bien grave, nous allons commencer par voir quel est le problème ici ce qui va te permettre en suite de réutiliser ce que tu es en train de mettre en place pour ta surcharge.

    Dans ton code :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int Vecteur2D::calculeEtAffichage()
    {
    v3 operator+(v1, v2)
    }

    On remarque de suite un problème : la compréhension des instances.
    La méthode ci-dessous se trouve dans la classe Vecteur2D.
    v1, v2 et v3 sont tous les trois des instances de Vecteur2D. Un exemple plus concret pour définir ce phénomène peut-être le suivant : tu es UnConfiantEtudiant, je suis Shr3ck. Nous sommes tous les deux des "Personne" (enfin j'espère ). Pourtant si l'on cherche dans le dictionnaire (qui est l'équivalent de la définition de la classe personne) "Personne" nous ne retrouverons pas nos nom car la classe "Personne" ne peut pas nous connaître.
    v1, v2 et v3 sont connus UNIQUEMENT de main.
    Vecteur2D ne peut pas connaître v1, v2 et v3. v1,v2 et v3 sont des vecteurs mais ce n'est pas pour autant que dans la définition de classe vecteur tu vas trouver l'ensemble des vecteurs de la planète .

    En suite ta méthode :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Vecteur2D::calculeEtAffichage()

    doit retourner un int ce qui n'est pas le cas actuellement puisque tu ne retournes absolument rien (absence du mot clé "return").

    Il y a d'autre problème dans cette méthode mais je pense qu'il serait préférable de revoir les bases ou au moins de repartir sur une base plus simple.

    Par exemple avant de réaliser la surcharge des opérateurs tu pourrais simplement mettre en place une classe Vecteur2D (Pour rappel un vecteur est point caractérisé par une coordonné en x et une en y), qui possède un constructeur et une méthode permettant de définir les valeurs des coordonnés. Cela devrait permettre de te faire réaliser quelques erreurs.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut
    J'ai réecris l'operateur dans sa définition.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int Vecteur2D::calculeEtAffichage(int &v3)
    {
      v3 operator+(Vecteur2D const &v1, Vecteur2D const &v2)
      return v3;
    }
    Je retourne y travailler.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par UnConfiantEtudiant Voir le message
    int Vecteur2D::calculeEtAffichage(int &v3)
    {
    v3 operator+(Vecteur2D const& v1, Vecteur2D const& v2)
    return v3;
    }
    Parce que j'ai le cœur et les yeux qui saignent

    Attention reponse peut-être à côté de la plaque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Vecteur2D& operator+(Vecteur2D const &v1, Vecteur2D const &v2) {
    // Un calcul
     
        return /* */
    }
     
    int Vecteur2D::calculeEtAffichage(int &v3) {
    // tous les opérateurs redéfinis s'utilisent de façon normale
     
        return (v1 + v2);
    }
    Après il faut faire attention move vs copy

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut
    OK comme ça c'est bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Vecteur2D operator*(int const& u, Vecteur2D const& v)
    {
    Vecteur2D t;
     
    t.x = u*v.x;
    t.y = u*v.y;
    return t;
    }
    je viens de comprendre l'essentiel : un operateur est un substitue a une méthode.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par UnConfiantEtudiant Voir le message
    je viens de comprendre l'essentiel : un operateur est un substitue a une méthode.
    Les opérateurs c'est quand même assez balèze à appréhender: il faut savoir si c'est une méthode de classe ou une fonction (*), si on prend en paramètre des références ou pas (**) (et faire attention aux conversions implicites), pareil pour le retour, et comme je l'ai dit faire attention [au moins] au copie lors des retours

    Et après il y a sûrement des subtilités avec les templates, mais je ne suis pas expert

    Operators in C and C++

    * -> Si je ne me trompe pas tous les opérateurs d'affectation (=, +=, -=, ...) ce sont des méthodes de classe. Comme cela on peut chaîner les opérateurs: v4 = v1 + v2 * v3;.
    ** -> Comme cela on peut chaîner les opérateurs: v4 = v1 + v2 * v3;.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut
    Oui il doit y avoir quelques nuances mais j'attend un niveau suffisant pour les étudier. Bref merci a tous et au revoir.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/12/2013, 12h29
  2. [SQL-Server] verifier si une partie du text saisi appartient a une liste des valeurs
    Par manel ingenieur dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/12/2010, 10h47
  3. moyenne d'une variable sur une partie des valeurs
    Par DiverSIG dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/09/2009, 22h19
  4. Réponses: 9
    Dernier message: 18/02/2008, 11h25
  5. Réponses: 13
    Dernier message: 27/11/2007, 11h06

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