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 :

Probleme Programmation orienté objet


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mai 2013
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 128
    Points : 56
    Points
    56
    Par défaut Probleme Programmation orienté objet
    Bonjour tout le monde je travail sur visual studio 2010 C++ et je suis habitué par la programmation avec le langage c# j'ai trouvé beaucoup de difference

    je suis entrain de faire un projet POO en C++
    L'objectif de l'exercice :

    Voilà ce qu'ils ont di dans l'exercice

    une équipe regroupe 11 joueurs, et dotée de méthodes permettant d’ajouter ou supprimer un joueur, ainsi que d’afficher la séléction des joueurs chacun avec sa position dans l’équipe.

    j'ai deux classes equipe et une classe joueur

    je voudrais ajouter dans la classe equipe un objet de type Joueur

    J'ai cherché sur le net j'ai pas trouvé ce cas et quand je fait comme ca :

    fichier Equipe.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #pragma once
     
     
    public class Equipe
    {
        public:Equipe(void);
     
     
    };
     
    public void Equipe::AjouterJoueur(Joueur);
    fichier Equipe.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
    #include "StdAfx.h"
    #include "Equipe.h"
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    Equipe::Equipe(void)
    {
     
    }
     
    void Equipe::AjouterJoueur(Joueur j1)
    {
        // un vecteur ou liste joueur qu'on va l'implementer
     
    };
    quand je compile pour voir juste est ce que je suis dans la bonne syntaxe ca me donne ces erreurs :

    Nom : aide.PNG
Affichages : 100
Taille : 59,4 Ko

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Il en va en C++ presque comme en C# : si tu veux créer une fonction membre d'une classe, il faut que la déclaration de la fonction se trouve dans la classe en question.

    Si tu veux que la fonction ajouterJoueur soit une fonction membre de la classe Equipe, il faut que la déclaration de cette fonction se trouve... entre l'accolade ouvrante et l'accolade fermante de la définition de la classe

    Autrement dit, tu devrais avoir quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Equipe{
        public:
            void ajouterJoueur(Joueur const &);
        /* ... */
    };
    avec l'implémentation de la fonction prendant la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void Equipe::ajouterJoueur(Joueur const &){
        /* ... ce qu'il faut faire ici */
    }
    NOTE :
    La notion de "classe publique" n'existe pas en C++. Une classe est une classe, point-barre.

    Tu ne dois indiquer la visibilité des différents éléments que dans la définition d'une classe. Et lorsque tu définis une visibilité, tu le fait "jusqu'à indication contraire de ta part".

    Une classe "typique" pourrait donc être composée sous une forme proche de
    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
    class MaClasse{
        public:
           /* tout ce qui est ici est accessible depuis "n'importe où dans le code" */
           void publicFunction(); 
           /* ... plusieurs autres éléments qui seront également dans l'accessibilité publique */
        protected:
           /* tout ce qui est ici est accessible
            *    - depuis les fonctions membres de MaClasse (publicFunction, par exemple)
            *    - depuis les fonctions membres des classes dérivées de MaClasse
            *    - depuis les fonctions ou les fonctions membre de classes amies
            */
           void protectedFunction();
           /* d'autres éléments protégés */
        private:
           /* Tout ce qui est ici n'est accessible que
            *    - depuis les fonctions membres de MaClasse (publicFunction ou protectedFunction par exemple)
            *    - depuis les fonctions amie et les fonctions membres des classes amies
            */
          void privateFunction();
          UnType leMembre_;
          /* d'autres éléments privés */ 
    }
    Un peu de lecture te feras sans doute le plus grand bien. Quelques extraits choisis:
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre du Club
    Inscrit en
    Mai 2013
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 128
    Points : 56
    Points
    56
    Par défaut
    Re,

    Merci beaucoup pour ces grands efforts ...

    Voilà ce que j'ai ajouté :
    fichier Equipe.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
    #include "StdAfx.h"
    #include "Equipe.h"
    #include <iostream>
    #include <vector>
    #include "Joueur.h"
    using namespace std;
     
    Equipe::Equipe(void)
    {
     
    }
    vector<Joueur> ListJoueurequipe;
     
    void Equipe::AjouterJoueur(Joueur const &j)
    {
        // un vecteur ou liste joueur qu'on va l'implementer
     
    }
    Equipe.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #pragma once
    #include "Joueur.h"
     
    public class Equipe
    {
    	public:Equipe();
    	void AjouterJoueur(const Joueur &j);
     
    };
    Question 1 dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Equipe::AjouterJoueur(Joueur const &j)
    {
        // un vecteur ou liste joueur qu'on va l'implementer
        ListJoueurequipe.add(j) // c'est faut c'est juste pour montrer ce que je voudrais faire
    }
    pourquoi on ajoute const &j
    pourquoi ne pas faire seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Equipe::AjouterJoueur(Joueur  &j)
    {
        // un vecteur ou liste joueur qu'on va l'implementer
     
    }
    & : je crois c'est pou alouer un espace memoire ...
    et const c'est une constante mais nous on a un type classe


    Question 2 :

    j'ai ajouté un vecteur de type Joueur est ce que ce type de collection
    est le bon choix puisque c'est exigé dans l’exercice

    probleme d'ajout
    dans c# je me suis habitué de faire par exemple
    le vecteur s'appel list

    je crois c'est la meme chose


    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par karimot Voir le message
    pourquoi on ajoute const &j
    pourquoi ne pas faire seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Equipe::AjouterJoueur(Joueur  &j)
    {
        // un vecteur ou liste joueur qu'on va l'implementer
     
    }
    & : je crois c'est pou alouer un espace memoire ...
    et const c'est une constante mais nous on a un type classe
    Hello,

    Il va falloir revoir (voir ?) les bases

    En c# tu as des structs (en c++ ce sont des classes avec sémantique de valeur) et des class (en c++ ce sont des classes avec sémantiques d'entité).

    En c# les structs sont passés, par défaut, par valeur, l'équivalent en c++ serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Foo { };
     
    void foo(Foo f) {
        // ...
    }
    (Bien qu'il soit possible de passer une struct par ref en c#, tout comme il est possible de passer une classe avec sémantique de valeur par ref en c++).

    En c# une classe est passé par référence et il n'est pas possible de la passer par valeur (mes connaissances en c# sont assez .. limités, peut être que je me trompe sur ce point). Ce qui équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Foo { };
    void foo(Foo& f) {
        // ...
    }
    Si f n'est pas modifié dans foo, alors on le déclare constant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void foo(const Foo& f) {
        // ...
    }
    A choisir entre un passage par valeur et un passage par référence constante, on choisi toujours le passage par ref constante pour une classe que l'on crée (pour simplifier), et toujours un passage par valeur pour un type primitif (int, char, float etc...)

Discussions similaires

  1. Problème de programmation orientée objet
    Par dan65 dans le forum WinDev
    Réponses: 8
    Dernier message: 17/09/2006, 01h04
  2. Réponses: 2
    Dernier message: 30/03/2006, 14h48
  3. [C#] Comment correctement programmer orienté objet ?
    Par ChristopheOce dans le forum C#
    Réponses: 5
    Dernier message: 06/02/2006, 13h22
  4. [POO] apprendre la programmation orientée objet
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 10/12/2005, 11h33
  5. [DEBUTANT] Conseil sur la programmation orienté objet
    Par etiennegaloup dans le forum Langage
    Réponses: 7
    Dernier message: 27/05/2005, 12h59

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