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 :

Parcours d'un vector


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut Parcours d'un vector
    Bonjour,

    J'ai deux classe "Cartésien" et "Polaire" qui dérive tous les deux de la classe "Point".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Cartesien : public Point
    {
        private:
            double _x, _y;
     
        public:
            Cartesien();
            Cartesien(double, double);
            Cartesien(const Polaire & inPointPolaire);
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Polaire : public Point
    {
        private:
            double _r, _theta;
     
        public:
            Polaire();
            Polaire(double, double);
            Polaire(const Cartesien & inC);
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Point
    {
        public:
            Point();
    };

    J'ai une classe "Nuage" qui contient un ensemble de "Point" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Nuage
    {
        private:
            std::vector<Point *> _tabPoint;
     
        public:
            Nuage();
     
            void calculBarycentre();
            void ajouterPoint(const Point & inP);
    };


    Le but est de calculer le barycentre du nuage :

    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
    void Nuage::calculBarycentre()
    {
        double x = 0., y = 0., Gx, Gy;
        std::vector<Point *>::iterator it;
     
        for (it = _tabPoint.begin(); it != _tabPoint.end(); ++it)
        {
     
        }
     
        Gx = x / _tabPoint.size();
        Gy = y / _tabPoint.size();
     
        std::cout << "Gx = " << Gx << ", Gy = " << Gy << std::endl;
    }
    Ma question : Comment accéder aux cordonnées cartésiennes de tous les points (sachant que j'ai tous les accesseurs nécessaires).

    J'ai des opérateurs de conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Cartesien::operator Polaire()
    {
        double r, theta;
     
        r     = sqrt(_x * _x + _y * _y);
        theta = atan(_y / _x);
     
        return Polaire(r, theta);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Polaire::operator Cartesien()
    {
        double x, y;
     
        x = _r * sin(_theta);
        y = _r * cos(_theta);
     
        return Cartesien(x, y);
    }
    Merci.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Ta classe point doit avoir une méthode virtuelle pure (abstraite) getCoordonneeCartesiennes :
    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
    class Cartesien;
     
    class Point
    {
           public :
                virtual Cartesien   getCoordonneeCarthesiennes(void) = 0;
    };
     
    class Cartesien
    {
          public :
                     Cartesien   getCoordonneeCarthesiennes(void){ return *this; }
    };
     
     
    class Polaire
    {
          public :
                     Cartesien   getCoordonneeCarthesiennes(void){ //conversion return ...; }
    };

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut
    D'après ce que j'ai fait avant il faut utilisé un cast d'objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (it = _tabPoint.begin(); it != _tabPoint.end(); ++it)
    {
        Cartesien c = (Cartesien )(**it);
    }
    Mais sa ne fonctionne pas

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par CliffeCSTL Voir le message
    D'après ce que j'ai fait avant il faut utilisé un cast d'objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (it = _tabPoint.begin(); it != _tabPoint.end(); ++it)
    {
        Cartesien c = (Cartesien )(**it);
    }
    Mais sa ne fonctionne pas
    Un Cartesien est un point mais un point n'est pas un cartesien !
    Faire des cast est souvent plus une erreur de conception qu'autre chose.
    Défini une méthode virtuelle pure et tu pourra faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (it = _tabPoint.begin(); it != _tabPoint.end(); ++it)
    {
        Cartesien c = (*it)->getCoordonneeCartesien();
    }

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Par défaut
    Et si je voulais avoir les coordonnées polaire à la place ? il me faudrait 2 fonctions.

    Et si j'avais 50 types de points il me faudrait 50 fonctions ?


    On ne peut pas faire mieux ?

  6. #6
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Que ce soit des fonctions ou des cast (ou n'importe quoi d'autre), tu devrais multiplier les lignes de code du nombre de type souhaité.

    Mieux ? pour ma part je travaillerai uniquement avec des méthodes getX() getY() qui me sortirait les coordonnées du point, quel qu'il soit.
    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.

Discussions similaires

  1. Parcours d'un vector
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 23/12/2010, 08h47
  2. Perf de parcours vector : iterator vs index
    Par codnob dans le forum SL & STL
    Réponses: 20
    Dernier message: 28/01/2010, 14h23
  3. Parcours en largeur d'une arborescence->Vector
    Par Paniez dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 07/12/2006, 22h21
  4. Probleme avec parcours de stl::vector
    Par MDiabolo dans le forum SL & STL
    Réponses: 10
    Dernier message: 08/03/2006, 00h35
  5. [Débutant(e)] Parcours d'un hashtable comme un vector
    Par Arkan dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 12/04/2005, 17h55

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