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 :

a quoi sert "class" dans void readConf(class INIFile* inifile);


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut a quoi sert "class" dans void readConf(class INIFile* inifile);
    Bonjour,
    Je suis débutant en C++. J'aimerais savoir pourquoi on met le mot clef "class" dans le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void readConf(class INIFile* inifile);
    Un void readConf(INIFile* inifile); ne suffit - il pas ?

    Merci d'avance pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je pense que c'est une écriture indirectement héritées du C. En C lorrsque l'on instancie, que l'on passe comme argument ou que l'on retourne un structure, on doit écrire explicitement le mot clé struct devant (il y a moins de contourner mais ça sort du sujet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct MaStruct {}; // définition
     
    struct MaStruct uneInstanceDeMaStruct; // déclaration d'une variable de type MaStruct
    struct MaStruct fonctionRetour(); //declaration d'une fonction retournant une structure MaStruct
    void parametre(struct MaStruct arg); // déclaration d'une fonction prenant une structure comme argument
    Le C++ autorise cette syntaxe, sans doute à cause de problèmes d'intercompatibilité; comme class et struct sont des mots clés quasi-équivalents(voir la FAQ), il doit autoriser ce comportement pour les classes également.
    On peut aussi noter que le code suivant ne compile que grâce au mot-clé class précédent Test, le mot-clé permet de lever dans le bon sens l'ambiguité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Test{};
     
    int Test()
    {}
     
    int main()
    {
        class Test test;
    }

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut
    Je ne vois pas pourquoi il y aurait une ambuiguité si je j'enlève le "class" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Test{};
     
    int Test()
    {}
     
    int main()
    {
        class Test test;
    }
    Je declare un objet test de type Test en faisant
    non ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas si évident pour le compilateur : pour lui Test; est considéré comme une expression demandant l'adresse de la fonction Test(). Donc les deux expression suivantes sont équivalentes(et aussi absurde pour le compilateur l'un que l'autre):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Test test;
    (&Test) test;
    L'interêt est que si, par mégarde, tu déclare un jour un class endl dans l"espace de nom std, ton code ne devrait pas être affecté ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream>
     
    namespace std
    {
       class endl
        {};
    }
     
    int main()
    {
        std::cout << std::endl;
    }
    va compiler.

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Joe Dralliam Voir le message
    L'interêt est que si, par mégarde, tu déclare un jour un class endl dans l"espace de nom std, ton code ne devrait pas être affecté
    Oui, enfin ouvrir std pour y déclarer une nouvelle classe, j'ai du mal à qualifier ça de mégarde. C'est du sabotage à ce niveau.

Discussions similaires

  1. A quoi sert ce zéro (0) dans ce code ?
    Par andres007 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 19/02/2007, 23h42
  2. [debutant] a quoi sert un serveur DNS dans un reseau local
    Par passion_info dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 05/10/2006, 12h25
  3. Réponses: 3
    Dernier message: 21/05/2006, 17h14

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