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 :

[POO] fichier .h et .cpp


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Par défaut [POO] fichier .h et .cpp
    Bonjour à tous,

    Voilà, j'ai une petite question. Qu'elle est la raison pour laquelle on split généralemet une classe en un fichier header (.h) et un fichier cpp. Pour être passé par d'autres langages qui ne le font pas, je trouve qu'on gagne vraiment en clarté à tout fourrer dans un seul fichier...

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Lorsque quelqu'un d'autre travaille sur ton projet, il n'a besoin que des fichiers de déclaration (.h) et pas d'implantation pour travailler.

    La seule chose que tu dois fournir est:
    * un fichier objet contenant de code des classes compilé
    * les .h pour connaitre l'interface.

  3. #3
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    Bonjour,

    Le fichier .h sert uniquement à la déclaration de fonctions ou de classes.
    Cela évite d'avoir à écrire le corps des fonctions en entête du fichier principal puisque le fichier header est connu dans le main grace au #include "monFichier.h".
    Ca permet également de connaître la classe (ou les fonctions) dans d'autres fichiers .cpp (et donc evite la redéfinition).

    Lorsqu'une personne reprend ton projet elle n'a principalement besoin que des fichiers .h.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Par défaut
    Ok, mais c'est un peu là qu'est sensé intervenir la documentation non?

  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
    La documentation sert peu au compilateur, les en-têtes beaucoup plus, puisqu'il a la liste des fonctiosn auxquelles il pourra accéder. Dans d'autres langages, c'est fait à l'aide des "import"

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Par défaut
    Si je ne dis pas de betises, declarer ses fonctions dans un fichier.h n'est pas obligatoire. il n'est même pas obligatoire d'ecrire leur prototype dans le fichier source.
    On peut directement definir toutes ses fonctions dans son fichier .cpp.
    Sauf que cette manière de faire a deux inconvenients:
    1. On ne pourra utiliser dans une fonction que les fonctions definies plus haut
    2. Il sera plus difficile de partager les fonctions entre fichiers .cpp

    D'ou l'idée de l'interface ou plutôt des headers (*.h)

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    La déclaration d'une classe par contre, et de toutes ses fonctions membres, est obligatoire.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Par défaut
    Citation Envoyé par Médinoc
    La déclaration d'une classe par contre, et de toutes ses fonctions membres, est obligatoire.
    J'en suis pas sûr Médinoc car dans le corps d'une classe, on peut definir le corps de toutes ses fonctions avec en prime utiliser des methodes non declarées ou definie plus haut.(Mon compilateur visual c++ m'y autorise)

    Le plus encore avec des prototypes et des .h est de pouvoir passer des paramètres par défaut aux methodes et fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Toto
    {
      long f1(){return f2(3); }
      long f2(long x) {return x;}
     ~virtual Toto(){}
    };

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En effet, on peut utilisée dans une classe des variables/fonctions déclarées plus bas.

    Mais toute fonction membre définie hors de la classe doit être déclarée dedans.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Par défaut
    Oui effectivement

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/08/2010, 15h13
  2. Réponses: 4
    Dernier message: 05/05/2010, 16h50
  3. classe template separe en fichier header et cpp
    Par S_ami dans le forum Langage
    Réponses: 6
    Dernier message: 03/06/2009, 11h30
  4. Convertion du fichier .exe vers .cpp
    Par p_programmeur dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 11/04/2009, 18h24
  5. fichiers h et cpp
    Par patrick_lassaly dans le forum MFC
    Réponses: 16
    Dernier message: 09/01/2006, 15h00

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