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 :

Classes et Structures (C++)


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
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut Classes et Structures (C++)
    Salut!

    J'ai continué ma lecture, et en arrivant au chapitre qui explique comment utiliser des "classes" en C++, je n'ai pas pu m'empêcher de penser sans arrêt aux structures.

    Apparemment, les classes sont plus complètes que les structures: on peut gérer l'encapsulation (public/private), y ajouter des fonctions...

    Concrètement, mes questions sont les suivantes:
    - Est-ce que les classes sont au C++ ce que les structures sont au C (sachant que les classes ont apparemment des possibilités plus étendues).
    - Si dans mes classes, je mettais tout en "public", quelle incidence cela pourrait-il avoir sur mon programme?
    - Les fonctions contenues dans mes classes peuvent-elles y être seulement déclarées, et implémentées ailleurs dans le programme? (Ou alors je risque de me retrouver avec des classes hyper-grandes si j'ai un code complexe a y intégrer?)

    Merci pour ces petits éclaircissements. Si jamais je vais un peu vite (parce que je suis encore en train de lire), contentez-vous de me le signaler et merci de votre compréhension.

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Salut

    Voici un début de réponse via les entrées de la FAQ


    Citation Envoyé par Armulis Voir le message
    - Est-ce que les classes sont au C++ ce que les structures sont au C (sachant que les classes ont apparemment des possibilités plus étendues).
    En C++, class et struct sont quasiment équivalents.
    FAQ C++ - Quelle est la différence entre class et struct ?


    Citation Envoyé par Armulis Voir le message
    - Si dans mes classes, je mettais tout en "public", quelle incidence cela pourrait-il avoir sur mon programme?
    Tu vas t'attirer les foudres des autres développeurs ^^
    Tu vas complexifier l'utilisation de ta classe et si tu veux faire évoluer ta classe sans casser la compatibilité, ça sera plus difficile (voire impossible).
    FAQ C++ - Qu'est-ce que l'encapsulation ?

    Citation Envoyé par Armulis Voir le message
    - Les fonctions contenues dans mes classes peuvent-elles y être seulement déclarées, et implémentées ailleurs dans le programme? (Ou alors je risque de me retrouver avec des classes hyper-grandes si j'ai un code complexe a y intégrer?)
    Oui, bien sûr
    FAQ C++ - Comment structurer ma classe en un fichier .h et un fichier .cpp ?

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Quelques précisions supplémentaires (juste une addition au message de Ehonn)
    Citation Envoyé par Armulis Voir le message
    - Est-ce que les classes sont au C++ ce que les structures sont au C (sachant que les classes ont apparemment des possibilités plus étendues).
    En fait, classe et structure en c++ c'est la même chose. Seule l'accessibilité par défaut (public/private) change. En revanche, les classes/structs en C++ ça n'a rien à voir avec les structs en C. En C, la notion d'objet (donc héritage, polymorphisme et tout ce qui en découle) n'existe pas. Pas plus que la notion de template. Il est possible de simuler un comportement orienté objet en C, mais il faut passer par des mécanismes "artificiels", non natifs, mais au final ce ne sera jamais vraiment la même chose.

    Citation Envoyé par Armulis Voir le message
    - Si dans mes classes, je mettais tout en "public", quelle incidence cela pourrait-il avoir sur mon programme?
    L'incidence d'un tel choix est que tu te priverais d'un outil très puissant de la poo, à savoir l'encapsulation. L'encapsulation a plusieurs avantages. En particulier, cela permet de mieux structurer ton programme. Pour un petit programme de 10 lignes, ça n'a aucun sens. Mais dès que ton programme grandit (et ça va souvent très vite), une bonne encapsulation te permet d'éviter des erreurs, d'ajouter plus rapidement de nouvelles fonctionnalités, d'avoir une meilleure vision du code que tu as déjà écrit, etc.

    Citation Envoyé par Armulis Voir le message
    - Les fonctions contenues dans mes classes peuvent-elles y être seulement déclarées, et implémentées ailleurs dans le programme? (Ou alors je risque de me retrouver avec des classes hyper-grandes si j'ai un code complexe a y intégrer?)
    C'est même un des principe de base du c++: les déclarations dans les en-tête (fichier.h), l'implémentation dans le fichier source (fichier.cpp). Avec un bémol, car on ne peut pas vraiment faire ça dans le cas de classes templates.
    C'est un principe parfois critiqué (le code d'une classe se retrouve séparé dans 2 fichiers, c'est parfois compliqué pour les programmeurs qui viennent d'autres langages où ce n'est pas le cas), mais ça a de nombreux avantages, dont celui que tu cites.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Juste pour rajouter mon grain de sel (et en mettre une couche supplémentaire ):
    Citation Envoyé par r0d Voir le message
    L'incidence d'un tel choix est que tu te priverais d'un outil très puissant de la poo, à savoir l'encapsulation. L'encapsulation a plusieurs avantages. En particulier, cela permet de mieux structurer ton programme. Pour un petit programme de 10 lignes, ça n'a aucun sens. Mais dès que ton programme grandit (et ça va souvent très vite), une bonne encapsulation te permet d'éviter des erreurs, d'ajouter plus rapidement de nouvelles fonctionnalités, d'avoir une meilleure vision du code que tu as déjà écrit, etc.
    Il faut d'ailleurs constater que, même C essaye d'apporter une certaine encapsualtion...

    C'est beaucoup moins évident qu'en C++, où la notion d'encapsulation vient "naturellement" avec le paradigme orienté objets, mais c'est néanmoins faisable. Prend, par exemple, la structure FILE dont on ne sait absolument rien, à part les fonctions qui la manipulent .

    C++ t'offre la possibilité d'encapsuler les données de manière simple et efficace, il serai dommage de ne pas le faire même si une classe dans laquelle tout serait public serait strictement à équivalent à une structure utilisant sa visibilité par défaut et contenant les même données (et inversément une structure où tout serait privé serait strictement équivalent à une classe utilisant sa visibilité par défaut et contenant les mêmes données, bien que cela n'aurait pas beaucoup de sens )
    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

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Par défaut
    au fait en c++ la classe est ce qu'est la structure en c, mais faut noter que en c++ on peut dire ''class = struct'' et si tu met tout en public dans ta classe et surtout les attributs croit moi tu auras plus d'ennemis que de programmeurs qui font du c++ sur terre donc pas touche a ce niveau: méthodes en public et attributs en private.

  6. #6
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par défaut
    Citation Envoyé par bayaola93 Voir le message
    au fait en c++ la classe est ce qu'est la structure en c, mais faut noter que en c++ on peut dire ''class = struct'' et si tu met tout en public dans ta classe et surtout les attributs croit moi tu auras plus d'ennemis que de programmeurs qui font du c++ sur terre donc pas touche a ce niveau: méthodes en public et attributs en private.
    Balivernes, mettre des attributs en public n'est pas plus idiot que mettre des méthodes en private. Se priver systématiquement de le faire lorsque cela est possible/utile, voilà la véritable erreur.

  7. #7
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    La différence essentielle en C++ entre une structure et une classe (hormis l'aspect public/private), c'est que l'on peut aligner (niveau mémoire) une structure, mais pas une classe. C'est utile lorsque l'on veut optimiser son code, ou lorsque l'on mélange code c++ et code assembleur (l'asssembleur nécessite en général un alignement mémoire des données).

    Citation Envoyé par bayaola93 Voir le message
    croit moi tu auras plus d'ennemis que de programmeurs qui font du c++ sur terre donc pas touche a ce niveau: méthodes en public et attributs en private.
    Je rejoins germinolegrand, en C++ on utilise une structure quand c'est judicieux, et une classe quand c'est judicieux. Les développeurs C++ n'ont jamais aboli l'utilisation de structure au profit de classe.

    Je pense que tu fais référence aux débats qui disent de toujours protéger les variables membres d'une classe C++ par un accesseur. Cela n'a rien à voir avec le débat structure/classe.

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

Discussions similaires

  1. [Débutant] Classe ou structure
    Par cyrill.gremaud dans le forum C#
    Réponses: 1
    Dernier message: 14/01/2013, 08h58
  2. [VB.NET] Privilégier une classe à une structure ou inversement ?
    Par Jean-Philippe André dans le forum Débuter
    Réponses: 2
    Dernier message: 27/02/2012, 08h47
  3. Organisation d'un programme (Class et Structures)
    Par le_binr dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/12/2011, 10h12
  4. Classe ou structure ?
    Par tintin72 dans le forum Débuter
    Réponses: 9
    Dernier message: 20/11/2008, 19h26
  5. Réponses: 6
    Dernier message: 26/06/2006, 10h29

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