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 :

Utilité d'une structure en POO ?


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut Utilité d'une structure en POO ?
    Bonjour a tous ,
    A part que par défaut , dans une structure les membres sont publics , je ne vois pas trop la différence avec une Classe et a quoi cela me serai utile .
    Auriez vous une explication ou mieux un petit exemple qui met cela en évidence ?
    Les structures sont elles régulièrement employé ?
    Merci de votre aide .

  2. #2
    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
    Parce qu'il n'y en a pas en dehors de la visibilité par défaut.
    Les structures sont généralement utilisées pour des POD ou trucs simples qui ne font qu’agréger des données avec très peu voire aucune fonction membre.
    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.

  3. #3
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    On peut donc s'en passer .
    Merci de ton aide .

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 762
    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 762
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    On peut donc s'en passer .
    C'est dommage , comme le dit @Bousk, parce que cela permet de faire la distinction entre une classe et une classe sans logique (data transfer object ou DTO en anglais, lien wiki en français)

    Et surtout que tu as les constructeurs (et notamment celui par recopie)/ destructeurs, les opérateurs (surtout d'affectation), ... qui permettent une meilleure manipulation de ces sacs à données

  5. #5
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    Salut,

    Pour info, même s'il n'existe que très peu de différence entre les classes et les structures, il s'avère que, avec le temps, j'utilise de moins en moins les classes et de plus en plus les structures dans le sens où j'essaie de dissocier autant que possible les données et les aspects logiques.

    Globalement, au lieu de réaliser un code comme :
    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
    template<typename T>
    class calculator {
    private:
    	T v1;
    public:
    	calculator(T const a, T const b):
    		v1{a}, v2{b}
    	{}
     
    	double mean();
    	T plus(T const val);
    	T minus(T const val);
    	//...
     
    };
    je préfère utiliser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template<typename T>
    struct data {
    	T v1;
    	T v2;
    };
     
    T plus(data const & dst, T const val);
    T minus(data const & dst, T const val);
    Bien sure, j'aurais pu choisir un meilleur exemple et il ne s'agit que de MA manière d’interpréter l'idée d'un code S.O.L.I.D, mais je tenais à partager le fait que penser C++ ne veux pas dire penser 'class' ou encore 'full OOP'

    Bien sure, j'utilise encore les classes parfois, mais principalement lorsque les données n'ont vraiment aucune raison d'être publiques et doivent être manipulées d'une façon bien précise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<typename T>
    struct vec2 {
    	T x;
    	T y;
    };
    Ici, pas besoin de classe car il est bien plus pratique d'accéder aux valeurs directement grâce à vec2<float> p1{6.0f, 7.2f}; /*....*/ p1.x; p1.y
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template<typename T>
    class poly {
    private:
    	std::vector<vec2<T> > verts;
     
    public:
    	//....
     
    	void insert_segment(vec2<T> const p0, vec2<T> const p1);
     
    	//...
     
    };
    Dans ce cas par contre, on imagine que la fonction void insert_segment(vec2<T> const p0, vec2<T> const p1); vient modifier le std::vector d'une certaine manière, mais en aucun cas l'utilisateur ne doit pouvoir venir manipuler / transformer le vecteur de vec2<T> comme il l'entends.

    Voilà, j'espère que plus qu'à t'embrouiller dans ta réflexion, cette humble illustration t'aidera à te faire une idée sur TA manière d'utiliser les classes ou les structures.

  6. #6
    Membre confirmé
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 216
    Par défaut
    Merci à chacun d'entre vous 🙂
    De mon point de vue de débutant je serai tenté de dire :
    J'utilise des classes pour protéger certaines variables qui doivent l'être absolument
    Et des structures le reste du temps puisqu'elles sont peut-être plus simple à manipuler

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

Discussions similaires

  1. [POO] Formulaire d'inscription en POO, avec une structure MVC
    Par 21baki dans le forum Langage
    Réponses: 6
    Dernier message: 12/02/2020, 00h06
  2. [POO] ajouter des données dans un tableau contenant une structure
    Par Peanut dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/02/2009, 18h41
  3. [POO] Créer une structure de données
    Par zulot dans le forum Langage
    Réponses: 10
    Dernier message: 15/08/2006, 12h51
  4. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    Réponses: 15
    Dernier message: 23/04/2003, 15h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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