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 :

inclusions des fichiers en-tete (.h) et declaration d'une classe


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Points : 48
    Points
    48
    Par défaut inclusions des fichiers en-tete (.h) et declaration d'une classe
    Bonjour ,

    J'ai remarque dans certains codes ce qui suit.

    Voici une declaration d'une class A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class A
    {
       // declaratrion des memebres
    }
    si dans un autre fichier .h ou .cpp j'ai :
    dans ce cas là j'ai remarque qu'on fait inclusion du fuchuer en-tete qui detient la declaration de class A.

    Par contre si j'ai une declaration comme :
    Là on peu simplement rajouter cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class A; // sans inclure le fichier en-tete
    Quelqu'un oeut m'expliquer pourquoi ? est ce quoi la difference ? j'ai pas trouver la reponse dans les livres que j'ai et sur le net !

    Merci en avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    A *class (sans include A.h mais en déclarant avec class A)
    class A est une déclaration anticipée. On indique juste au compilateur que la classe A existe. Toutefois, ceci ne marche que sur les pointeurs et les références. Par contre, tu ne dois pas oublier d'inclure A.h dans le .cpp de ta classe.

    A class (avec include A.h)
    Tu es obligé d'inclure le fichier A.h car le compilateur a besoin de connaître en détail le contenu de la classe (par exemple la taille de la classe pour savoir la place qu'elle prend en pile).

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par aoyou
    A *class (sans include A.h mais en déclarant avec class A)
    class A est une déclaration anticipée. On indique juste au compilateur que la classe A existe. Toutefois, ceci ne marche que sur les pointeurs et les références. Par contre, tu ne dois pas oublier d'inclure A.h dans le .cpp de ta classe.

    A class (avec include A.h)
    Tu es obligé d'inclure le fichier A.h car le compilateur a besoin de connaître en détail le contenu de la classe (par exemple la taille de la classe pour savoir la place qu'elle prend en pile).
    Pourquoi dans le cas de pointeurs , le compilateur ne doit ( plutot pas obligé)pas connaitre en detail le contenu de la class ?

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Car la taille d'un pointeur est fixe (utilise sizeof() pour t'en rendre compte).

  5. #5
    Membre averti Avatar de Ekinoks
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Points : 358
    Points
    358
    Par défaut
    Citation Envoyé par kass28
    Pourquoi dans le cas de pointeurs , le compilateur ne doit ( plutot pas obligé)pas connaitre en detail le contenu de la class ?
    Car si tu créer QUE un pointeur de la class A, le compilateur n'a rien besoin de connaitre d'elle (a part quel existe)...
    Un pointeur n'est jamais rien de plus qu'un simple numéraux indiquant un emplacement (et donc de taille fixe quelque soit se qu’il pointe)...
    Par contre si ce n'est pas un pointeur, le compilateur là a besoin de connaitre sa taille mais aussi de connaitre son constructeur...

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

    Informations professionnelles :
    Activité : aucun

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

    Tant que tu parle d'un pointeur sur une classe quelconque, le fait de savoir que c'est un pointeur et que la classe existe - par une déclaration anticipée - peut suffire: un pointeur ayant toujours la même taille pour une implémentation donnée.

    Par contre, dés le moment où tu souhaites accéder à un élément contenue dans la classe - appeler une méthode de la classe, par exemple - il devient nécessaire de disposer du contenu de la classe, et donc d'avoir sa déclaration... ce qui implique qu'il faut inclure le fichier d'en-tête dans lequel la classe est déclarée

    Cela te parraît il moins nébuleux, maintenant
    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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/08/2010, 12h29
  2. inclusion des fichiers au niveau des namespace
    Par t-student dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2010, 14h10
  3. Réponses: 6
    Dernier message: 31/10/2009, 16h42
  4. Classe "classmanage" pour gérer l'inclusion des fichiers de classe
    Par lysandre dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 7
    Dernier message: 02/09/2008, 19h43
  5. [Inclusion des fichiers] hierarchie
    Par Casp dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 09/07/2004, 12h43

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