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 :

Déclaration des Constructeurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Par défaut Déclaration des Constructeurs
    Salut
    je veux savoir, ou peut-on déclarer un constructeur avec un corps, et avec juste le prototype?

    normalement on déclare des constructeurs au niveau des fichies .h et dans le corps d'une classe
    d'après ce que j'ai compris, dan le fichier .h on déclare des constructeurs avec un corps, et à l'intérieur d'une classe on définit des prototypes de constructeurs ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    Tu peux tout faire dans le header (.h) si tu veux, mais en principe tu n'y fais que la déclaration et tu fais la définition (implémentation) dans le fichier source (.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
    Bonjour,

    pour que les fonctionalités (constructeurs, destructeurs, operateurs, fonctions membres) d'une classe soient utilisables, il faut les déclarer et les définir. Il est primordial de comprendre ces deux notions (déclaration et définition).

    Exemples de déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MaClasse
    {
       MaClasse(); // déclaration du constructeur par défaut
       void UneFonction(); // déclaration de la fonction membre UneFonction()
    };
    Une fois déclarées, ces fonctionnalités doivent être définies.
    Exemples de définitions dans un fichier source (.cpp)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "MaClasse.h"
     
    MaClasse::MaClasse() // définition du constructeur par défaut de MaClasse
    {
       // du code
    };
     
    void Maclasse::MaFonction() // définition de la fonction membre UneFonction()
    {
       // code
    }
    Pour tout un tas de raisons, il est généralement conseillé de séparer les déclarations et les définitions, en mettant les déclarations dans les fichiers d'en-tête (.h/.hpp), et les définitions dans les fichiers sources (.cpp). Mais on a le droit de tout mettre dans l'en-tête. Par exemple, on peut faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class MaClasse
    {
       MaClasse() // déclaration et définition du constructeur par défaut
       {
          // du code
       }
     
       void UneFonction() // déclaration et définition de la fonction membre UneFonction()
       {
          // du code
       }
    };

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Par défaut
    Mais l'essentiel c'est qu'on peut pas définir un constructeur dans le fichier (.h) et même, sans la classe dans le fichier (.cpp)

    // pour que je puisse enlever cette partie de ma grammaire

    Merci pour vos aides

  5. #5
    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,
    Citation Envoyé par mima_mine Voir le message
    Mais l'essentiel c'est qu'on peut pas définir un constructeur dans le fichier (.h) et même, sans la classe dans le fichier (.cpp)

    // pour que je puisse enlever cette partie de ma grammaire

    Merci pour vos aides
    Mais si, on peut définir un constructeur (tout comme on peut définir n'importe quelle fonction membre d'une classe, d'ailleurs) au sein d'un fichier d'en-tête...

    Au niveau de la grammaire du constructeur, tu as deux possibilités (dont une qui est elle-même double):
    • déclaration only : le premier caractère significatif (comprend: en dehors des espaces et caractères assimilés) après la parenthèse fermante de la liste d'argument est un point virgule " ; "
    • déclaration + définition : peut apparaitre sous les formes:
      • deux points " : "+ liste d'initialisation + accolade ouvrante " { " + bloc(s) de code + accolade fermante " } "
      • accolade ouvrante " { " + bloc(s) de code + accolade fermante " } "

    Pour les fonctions membres "quelconques" (n'étant pas un constructeur), la syntaxe utilisant une liste d'initialisation n'existe pas

    D'un point de vue technique, il faut savoir:
    1. que la déclaration + définition d'une fonction membre directement dans le corps de la classe ou de la structure à laquelle elle appartient revient à la déclarer implicitement inline
    2. qu'il n'y a aucun intérêt à travailler de la sorte avec les fonctions membres virtuelles (cela crée d'ailleurs souvent des problèmes à l'édition de liens)
    Mais, quoi qu'il en soit, si tu vire cette partie de ta grammaire, tu l'ampute littéralement de toute une partie régulièrement utilisée (ne serait-ce que pour tout ce qui rentre dans la catégorie des accesseurs)
    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

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Par défaut
    tu sais j'ai laissé cette partie, mais je l'ai met en optionnelle comme ça je tombe pas sur des cas contraire

    Merci pour votre aide

Discussions similaires

  1. [Convention]déclarations des objets
    Par allstar dans le forum Langage
    Réponses: 4
    Dernier message: 17/11/2005, 00h57
  2. [MASM32] Déclaration des variables
    Par mrousse dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 30/09/2005, 14h30
  3. Réponses: 1
    Dernier message: 10/06/2005, 11h37
  4. [DB2] Ordre de déclaration des variables
    Par Fatah93 dans le forum DB2
    Réponses: 1
    Dernier message: 04/05/2005, 17h18
  5. Réponses: 5
    Dernier message: 10/11/2004, 19h44

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