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 :

Méthodes dans une classe ou à l'extérieur


Sujet :

C++

  1. #1
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut Méthodes dans une classe ou à l'extérieur
    Bonjour à tous,
    en lisant le poste de Swoög sur la librairie, il a été soulevé une question qui pour moi paraît primordiale.
    Je la formule donc ici.
    Est-ce qu'il vaut mieux mettre toutes les méthodes dans une classe ou celles seulement nécessaires ?
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ostream & operator<<(ostream & c, const MaClasse & a)
    Il vaut mieux la mettre dans la classe (en friend) ou à l'extérieur.
    Personnelement je la mettrai à l'extérieur, pourquoi ?
    Il me semble que lorsque l'on met des méthodes à l'intérieur d'une classe, celle-ci existe pour chaque objet, non ? (J'aimerais avoir des précisions sur ce point, en effet lorsque l'on alloue des objets, les méthodes définies à l'intérieur de la classe sont allouées aussi pour chaque objet (les friends aussi), non ?).

    Merci d'avance.

    A+

    b Oo

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Cette fonction sera de toute manière externe, on la considère comme appartenant à la classe non pas si elle est friend, mais si elle est fournie avec la classe, ce qui est le cas.

    Pour moi, une fonction doit être membre si elle n'a pas le choix, si elle peut être externe en faisant appel à des membres de l'interface publique de la classe, autant qu'elle le soit.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 62
    Par défaut
    Citation Envoyé par b Oo
    (J'aimerais avoir des précisions sur ce point, en effet lorsque l'on alloue des objets, les méthodes définies à l'intérieur de la classe sont allouées aussi pour chaque objet (les friends aussi), non ?)
    Je crois que tu te trompes sur ce point. On ne peut pas dire que les fonctions sont réalllouées à chaque fois. En effet, le code des fonction existe a un seul endroit, et il est partagé entre tous les objets (et heureusement)
    En fait, une fonction membre est comme une fonction statique, sauf qu'elle prend un paramètre (caché) this (c'est la convention d'appel thiscall).
    Ca veut donc dire que a.f() est sémantiquement équivalent à f(a). C'est juste une facilité d'écriture, mais derrière, le compilateur passe passe bien la référence de l'objet lors de l'appel de la méthode.
    Il n'y a donc aucun surcout a mettre une méthode à l'intérieur d'une classe. Pour ma part, quand une méthode s'applique vraiment à un objet, je la met dans la classe, même si ce n'est pas nécessaire (d'ailleurs, ca n'est jamais vraiment nécessaire, il suffirait de mettre toutes les données en publiques)

  4. #4
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Bonjour,
    merci pour les réponses, mais alors quels sont les avantages/désavantages de mettre une méhode à l'intérieur d'une classe ou à l'extérieur ?
    Il y a deux écoles Miles qui ne met que le nécessaire (ce que je faisais) et toi, socrate qui met presque toutes les méthodes à l'intérieur d'une classe.
    En résumé, c'est plus un style de programmation ou il y a des différences entre les 2 implémentations ?

    b Oo

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est un style, mais il y a des différences aussi. Par exemple ma méthode permet d'ajouter facilement des fonctionalités à une classe ou de la dériver sans avoir besoin de redéfinir des fonctions qui auraient le même nom que des fonctions surchargées, un pattern décorateur est facilement écrit, ...
    Le plus simple est de regarder More Exceptional C++ Style de Stutter et 101 Coding Standards http://c.developpez.com/livres/#L2744071447 de Stutter et/ou Alexandrescu qui montre les avantages et les inconvénients

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2011, 16h19
  2. [Dojo] Appel d'une méthode dans une classe JS
    Par ensareab dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 08/03/2011, 10h05
  3. placer une méthode dans une classe
    Par totoche dans le forum UML
    Réponses: 8
    Dernier message: 29/05/2008, 17h04
  4. Importation de méthodes dans une classe
    Par jarboo dans le forum C#
    Réponses: 1
    Dernier message: 25/07/2007, 12h21
  5. Ajout d'une méthode dans une classe
    Par Flow_75 dans le forum C++
    Réponses: 6
    Dernier message: 12/02/2007, 10h42

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