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 de fonction dans le "main".


Sujet :

C++

  1. #1
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut Déclaration de fonction dans le "main".
    Salut!

    Dans la FAQ C++ on voit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
        MaClasse x; // ok
        MaClasse y(); // déclaration de la fonction y !
    }
    Dans l'article:
    http://c.developpez.com/faq/cpp/?pag..._list_list_fct


    Quel est l'intérêt de déclarer des fonctions au sein d'autres fonctions?
    Si il n'y en a pas pourquoi est-ce possible de le faire, au lieu de réserver ce type d'écriture pour l'instanciation d'objet à partir du constructeur vide?

    Merci de vos réponses.

  2. #2
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ca permet de définir des fonctions qu'aucune autre fonction ne peut appeler, ça peut être pratique dans certains cas.

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    pour être précis, c'est un pointeur de fonction qui est déclaré...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Quel est l'intérêt de déclarer des fonctions au sein d'autres fonctions?
    De limiter la portée de la déclaration par exemple.

    Si il n'y en a pas pourquoi est-ce possible de le faire, au lieu de réserver ce type d'écriture pour l'instanciation d'objet à partir du constructeur vide?
    Comme te le dirait très certainement très bien Jean-Marc, les choses qui nous paraissent évidentes ne le sont pas forcément du point de vue grammaire du langage et implémentation de compilo.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Swoög
    pour être précis, c'est un pointeur de fonction qui est déclaré...
    Non, c'est bien une fonction. Un pointeur sur cette fonction serait déclaré de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaClasse (*Ptr)();
    Ptr = &y;

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    autant pour moi (je me coucherais en ayant appris un truc )

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    De limiter la portée de la déclaration par exemple.
    Alors seule la fonction "f1" qui déclare la fonction "f2" et les fonctions appelée par cette fonction "f1" peuvent y faire appel.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Alors seule la fonction "f1" qui déclare la fonction "f2" et les fonctions appelée par cette fonction "f1" peuvent y faire appel.
    Les fonctions appelées par f1 ne verront pas plus f2 que les autres. Et ce n'est pas une question de faire appel ou non, c'est juste une histoire de visibilité. N'importe qui d'autre qui déclarera f2 pourra l'appeler sans provoquer d'erreur de compilation.

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Ok, merci de ces précisions.

    Je met le tag .

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par seriousme
    Dans la FAQ C++ on voit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
        MaClasse x; // ok
        MaClasse y(); // déclaration de la fonction y !
    }
    Dans l'article:
    http://c.developpez.com/faq/cpp/?pag..._list_list_fct

    Quel est l'intérêt de déclarer des fonctions au sein d'autres fonctions?
    - compatibilite avec le C
    - ne pas introduire de dependance sur le contexte

    Si il n'y en a pas pourquoi est-ce possible de le faire, au lieu de réserver ce type d'écriture pour l'instanciation d'objet à partir du constructeur vide?
    (Constructeur vide pour constructeur par defaut, j'avais jamais vu).

    Tu veux que dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct c1 {
       MaClasse i1();
    };
    MaClasse i2();
    int main() {
       MaClasse i3();
       struct c2 {
          MaClasse i4();
       };
    }
    i1, i2, i4 soient des fonctions et i3 une variable locale avec un appel au constructeur par defaut (qui se fait d'ailleurs pres bien sans parentheses)?

  11. #11
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    (Constructeur vide pour constructeur par defaut, j'avais jamais vu).
    Moi non plus.
    Je veux bien sûr dire constructeur sans paramètre.
    Le "vide" étant un cas particulier de ce dernier.

    ne pas introduire de dependance sur le contexte
    Pourrais tu m'en dire un peu plus?

  12. #12
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par seriousme
    Pourrais tu m'en dire un peu plus?
    Regarde i2 et i3 dans mon exemple.

  13. #13
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Regarde i2 et i3 dans mon exemple.
    Mais encore?
    Ces deux déclarations sont indépendantes.
    En quoi y a t'il dépendance de l'une par rapport à l'autre?

  14. #14
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par seriousme
    Mais encore?
    Ces deux déclarations sont indépendantes.
    En quoi y a t'il dépendance de l'une par rapport à l'autre?
    Elles sont dans des contextes differents. Faire en sorte qu'une soit une declaration de fonction et l'autre une declaration de variable me semble chercher les complications.

  15. #15
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Merci de tes explications.

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

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