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�finition et d�claration


Sujet :

C++

  1. #1
    Membre tr�s actif Avatar de J_Lennon
    Inscrit en
    Mars 2007
    Messages
    168
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Par d�faut D�finition et d�claration
    Bonsoir,

    une question me trotte dans la t�te, et en cherchant, je n'arrives pas � en trouver la solution. Quelle est la diff�rence entre d�fintion et d�claration?
    J'ai lu qu'une d�claration pouvait �tre une d�finition ou pas, mais je ne sais pas pourquoi. Est-ce que quelqu'un peut m'�clairer?

    Merci.

  2. #2
    Alp
    Alp est d�connect�
    Expert confirm�

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    La d�claration ca peut �tre court.
    Par exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    class A;
    int f(int a, char c);
    int i;
    // ...
    Mais en C++, on peut soit donner d�claration puis impl�mentation (class A; puis class A { // ... }; plus loin), soit d�clarer tout d'un coup (directement class A { // ... }; ).

    Donc une d�claration peut d�finir aussi ce dont il s'agit.

    Pendant la r�daction de ce message, j'ai trouv� ceci.

    Tu fais mieux la diff�rence ?

  3. #3
    Membre tr�s actif Avatar de J_Lennon
    Inscrit en
    Mars 2007
    Messages
    168
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Par d�faut
    Merci pour ta r�ponse. Je penses avoir saisie le "concept".

    En visitant le site que tu as fournis dans ta r�ponse, j'ai pus observ� ce ci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    Exemples de définitions (+déclarations):
    int i;
    Or il semble pour toi, que c'est une simple d�claration sans d�finition, et pour moi �galement d'ailleur... Est-ce une faute de l'auteur ou un manque de compr�hension de ma part?

  4. #4
    Alp
    Alp est d�connect�
    Expert confirm�

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    H� bien pour un int, tout est dit dans cette ligne :
    Alors que pour une classe par exemple :
    On ne dit rien � propos de son futur contenu. Il en faut plus.
    Pour "int i;" on instancie un int, tout ce qu'on pourrait faire de plus sur une ligne similaire serait de lui donner une valeur.

    Donc c'est bien une d�finition

  5. #5
    Membre tr�s actif Avatar de J_Lennon
    Inscrit en
    Mars 2007
    Messages
    168
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Par d�faut
    Ok merci beaucoup tout est devenu clair! ^^

  6. #6
    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,

    Si l'on devait (tres fortement) sch�matiser, on pourrait dire que la d�claration permet de dire que quelque chose (une variable, une fonction, ou une classe) existe, alors que la d�finition permet de fournir des valeurs concretes et coh�rentes � quelque chose (variable, fonction ou classe).

    Une d�finition peut tres bien etre une d�claration, du fait que le code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class MaClass
    {
        public:
            MaClass();
            ~MaClass();
            /*...*/
    };
    dit, non seulement, que la classe MaClass existe, mais lui donne aussi une s�rie d'informations qui lui sont propres (toutes les m�thodes et tous les membres de la classe) alors qu'une d�claration aura plutot pour but de dire que "quelque chose existe, mais, ne t'en fais pas, tu trouveras plus tard sa d�finition"...

    En effet, le compilateur ne peux travailler que sur ce qu'il connait:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #ifndef MON_FICHIER_H
    #define MON_FICHIER_H
    class MaClass
    {
        public: 
            MaClass();
            ~MaClass();
            MonAutreClass& LaFonction();
    };
    class MonAutreClass
    {
       /*...*/
    };
    /*...*/
    posera probl�me du fait que, quand le compilateur devra g�rer LaFonction, il n'a pas encore rencontr� le type MonAutreClass, et qu'il ne sait donc pas qu'il existe

    Par contre, le simple fait de fournir une d�claration pour MonAutreClass avant que l'on en aie besoin pour MaClass permettra au compilateur de savoir que MonAutreClass existe, et qu'il peut attendre de trouver sa d�finition
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #ifndef MON_FICHIER_H
    #define MON_FICHIER_H
    class MonAutreClass; /* déclaration (anticipée) de MonAutreClass */
    class MaClass /* déclaration de MaClass ET définition dans la foulée */
    {
        public: 
            MaClass();
            ~MaClass();
            MonAutreClass& LaFonction();
    };
    class MonAutreClass /* Définition (le compilateur sait déjà qu'elle existe) de
                          * MonAutreClass 
                          */
    {
       /*...*/
    };
    /*...*/
    pour les variables, on fera plutot la distinction entre d�finition et assignation:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    int MaVariable; /* définit une variable de type int nommée MaVariable */
    • va D�clarer MaVariable (dire qu'elle existe) et
    • va fournir les informations n�cessaires � son utilisation (adresse m�moire m�moire, taille en m�moire, nom...)

    alors que
    va assigner la valeur 3 � la variable connue sous le nom de MaVariable
    Enfin, pour les fonctions, on fera plus volontier la distinction entre d�claration (dire qu'elles existent) et impl�mentation (fournir les instructions qu'elle doit effectuer):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void MaFonction();/* déclare MaFonction */
     
    void MaFonctin()/* Definis (fournit les informations relatives) ou implémente
                     * la fonction */
    {
       /*...*/
    }
    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

  7. #7
    Alp
    Alp est d�connect�
    Expert confirm�

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    En gros une d�finition est forc�ment une d�claration, mais l'inverse n'est pas toujours vrai.

  8. #8
    Membre tr�s actif Avatar de J_Lennon
    Inscrit en
    Mars 2007
    Messages
    168
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 168
    Par d�faut
    Merci beaucoup koala01.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. M�thode template : d�claration/d�finition et appel ?
    Par kidpaddle2 dans le forum Langage
    R�ponses: 3
    Dernier message: 22/04/2007, 14h09
  2. R�ponses: 9
    Dernier message: 18/01/2007, 08h55
  3. R�ponses: 1
    Dernier message: 23/09/2006, 00h41
  4. R�ponses: 5
    Dernier message: 24/08/2005, 21h37
  5. D�claration et d�finition dans un .cpp
    Par SteelBox dans le forum C++
    R�ponses: 15
    Dernier message: 26/06/2005, 21h39

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