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 :

Distance entre 2 point c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Par défaut Distance entre 2 point c++
    Bonsoir tt le monde;
    j'ai fait un petit programme qui calcule la distance entre 2 points.
    pour cet effet j'ai créé ma classe comme suivante :
    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
    #include <iostream>
    #include <math.h>
    using namespace std;
    class Point{
        int x,y;
        public :
               friend float distance(const Point &p);  
               Point(int i=0, int j=0):x(i),y(j){}
               friend void afficher(){
                      cout<<"la distance entre les 2 Point vaut : ";
               }
    };
    int main(){
        Point a = Point(3,7);
        Point b = Point(4,1);
        afficher();
        distance(b);
     
        cout<<endl;
        system("pause");
    }
    float distance(const Point &p){
        int dx = x - p.x;
        int dy = y - p.y;
        return sqrt(dx*dx + dy*dy);
    }
    j'ai réalisé ce truck sans déclaré la fonction distance comme amie de la classe Point et sa marche bien en mettant un objet de type Point comme paramètre de la méthode.
    comment je vais faire pour appeler ma méthode distance qui est amie de la classe Point ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Le friend ne sert à rien ici puisque la visibilité est public, cf. cette section de la FAQ.
    Sinon là tu définis tout en bas une fonction distance alors que tu avais déclaré une méthode distance dans la classe. Le "hasard" fait qu'elles ont toutes deux le même nom, mais il s'agit de deux choses différentes.

    MAT.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Salut,

    Le friend ne sert à rien ici puisque la visibilité est public, cf. cette section de la FAQ.
    Sinon là tu définis tout en bas une fonction distance alors que tu avais déclaré une méthode distance dans la classe. Le "hasard" fait qu'elles ont toutes deux le même nom, mais il s'agit de deux choses différentes.

    MAT.
    Bonjour ;
    Merci pour le lien; donc d après le FAQ je peut utiliser ma fonction friend en envoyant un objet comme argument?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Je ne comprends pas très bien ce que tu cherches à faire.
    Laisse tomber cette histoire de friend pour commencer, il sera toujours temps de t'en occuper après (ou pas).

    MAT.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Par défaut
    je veux seulement réaliser l'exercice en déclarant la fonction distance comme amie de classe Point.
    l’appel au fonction que j'ai fait est correcte; mais le compilateur me retourn un erreur dans l'implémentation de la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    float distance(const Point &p){
        int dx = x - p.x;
        int dy = y - p.y;
        return sqrt(dx*dx + dy*dy);
    }
    x et y non déclarés.
    comment je peux accéder à ces 2 variables ?

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Comme ta fonction 'distance' est une autre fonction que celle déclarée dans 'Point', et comme tu n'as pas déclaré de variables globales 'x' et 'y', effectivement 'x' et 'y' ne sont pas déclarés dans cette fonction.
    tu peux donc faire de 2 façons :
    - implémenter la fonction 'distance' membre de 'Point',
    - modifier ta fonction distance pour lui faire prendre 2 'Point' en paramètre.
    ce qui donnerait du code de ce genre :
    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
     
    // méthode 1
    float Point :: distance(const Point &p)
    {
        // ici x et y sont donc les membres de Point.
        int dx = x - p.x;
        int dy = y - p.y;
        return sqrt(dx*dx + dy*dy);
    }
     
    // méthode 2
    float distance(const Point & p1, const Point & p2)
    {
        int dx = p1.x - p2.x;
        int dy = p1.y - p2.y;
        return sqrt(dx*dx + dy*dy);
    }
    Pour exploiter le concept de friend, ça ne pourra se faire qu'avec la seconde méthode, et en passant les membres x et y en protected ou private. Ensuite il te faudra déclarer la fonction 'distance' en friend de 'Point' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Point
    {
    private:
        int x,y;
     
    public:
               Point(int i=0, int j=0);
               float distance(const Point &p);  
               void afficher();
     
               friend float distance( const Point & p1, const Point & p2);
    };
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

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

Discussions similaires

  1. Rechercher la distance entre un point et un autre.
    Par beegees dans le forum Mathématiques
    Réponses: 2
    Dernier message: 01/10/2007, 03h35
  2. [Base de données Spatial] Distance entre deux points
    Par Pumpkins dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/11/2006, 12h18
  3. Calcul de distance entre deux points en WGS84
    Par marieR dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2006, 17h07
  4. distance entre 2 points avec Point2D
    Par mikees dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 09/01/2006, 16h10
  5. Mesure distance entre 2 points d'une image
    Par vexal dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/05/2005, 14h29

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