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 :

Structure et pointeur de fonction


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut Structure et pointeur de fonction
    Bonjour,
    J'ai peut être mal cherché mais je n'ai pas trouvé de réponse à ma question :
    Est ce que l'on peut mettre dans une structure un pointeur de fonction ?
    Si oui comment faire car je n'y arrive pas.....
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Est ce que l'on peut mettre dans une structure un pointeur de fonction ?
    Bien sûr.

    Par exemple, avec plusieurs options de 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
    typedef double fonc(double);
    typedef double (*pfonc)(double);
    struct s
    {
      double (*pf1)(double);
      fonc *   pf2;
      pfonc    pf3;
     
    } x;
    ....
      x.pf1= sin;
      x.pf2= sin;
      x.pf3= sin;
      y = x.pf1(3.1416/4);
      z = x.pf2(3.1416/4);
      t = x.pf3(3.1416/4);

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    C'est même ainsi que l'on fait de la programmation orientée objet en C "pur", d'ailleurs.
    Le plus gros problème consiste à ne pas caster n'importe quelle fonction vers n'importe quel type fonctionnel, ce qui bien sûr conduit habituellement au casse-pipe.

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Re-bonjour,
    bon j'y suis arrivé...
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct MaClassC
    {
        int champ1;
        int champ3;
        int champ2;
        int (*division2) (int a, int b);
     
    };
    en fait j'essayais de définir le pointeur dans la structure ...

    est ce que l'on peut avoir une approche "orienté objet" grace au structure ?

    merci d'avance

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    ok je vois que l'on a déjà répondu à ma question pendant que je rédigeais la suite. donc merci !!!

    donc pour finir,
    structure <=> class
    et les unions ont quelles utilités dans une vue orienté objet ?
    merci

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par philippe13 Voir le message
    structure <=> class
    Oui, mais bon, c'est un très gros raccourci quand même. C'est une approche OO, mais ce n'est pas de l'objet malgré tout.

    Citation Envoyé par philippe13 Voir le message
    et les unions ont quelles utilités dans une vue orienté objet ?
    Polymorphisme principalement, même si c'est plutôt dangereux en C. Mais cela reste possible malgré tout, la seule difficulté réelle étant la notion d'héritage qui est difficile à réaliser en C "pur" (la composition, par contre, ne pose bien entendu aucun problème).

  7. #7
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    la seule difficulté réelle étant la notion d'héritage qui est difficile à réaliser en C "pur"
    Heu non, c'est assez simple en fait, on en a discuter il n'y a pas si longtemps d'ailleurs : http://www.developpez.net/forums/d82.../c/heritage-c/.
    Cordialement.

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Heu non, c'est assez simple en fait, on en a discuter il n'y a pas si longtemps d'ailleurs : http://www.developpez.net/forums/d82.../c/heritage-c/.
    Comme je le précisais dans ce post sur ladite discussion, on peut vite trouver les ennuis avec l'héritage en C (suppression de méthodes/attributs notamment, alignement, etc.). De plus, l'héritage se fait manuellement à 100% et non pas automatiquement, ce qui complexifie encore la notion (ou qui fait bouffer de la macro à outrance).

    N'oublie pas que là, on s'adresse à un débutant qui en est aux prémices de l'OO en C, cf. premier post.

  9. #9
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Comme je le précisais dans ce post sur ladite discussion, on peut vite trouver les ennuis avec l'héritage en C (suppression de méthodes/attributs notamment, alignement, etc.).
    Dans l'héritage, on ne supprime aucune méthode ou attribut donc aucun problème d'alignement.

    Citation Envoyé par Mac LAK Voir le message
    De plus, l'héritage se fait manuellement à 100% et non pas automatiquement, ce qui complexifie encore la notion (ou qui fait bouffer de la macro à outrance).
    Effectivement, il n'y a pas de magie, certes des macros bien foutus peuvent rendre les choses plus simples mais ça reste un poil trop lourd.

    Citation Envoyé par Mac LAK Voir le message
    N'oublie pas que là, on s'adresse à un débutant qui en est aux prémices de l'OO en C, cf. premier post.
    On est d'accord, néanmoins pour de l'héritage simple, il n'y a pas trop de difficulté.

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Dans l'héritage, on ne supprime aucune méthode ou attribut donc aucun problème d'alignement.
    Dans la théorie, oui. En pratique, en C, c'est possible de faire cette bourde et c'est bien velu pour déplanter le bouzin, en général.

    Citation Envoyé par nicolas.sitbon Voir le message
    On est d'accord, néanmoins pour de l'héritage simple, il n'y a pas trop de difficulté.
    Cela reste prématuré par rapport à son niveau, du moins au vu du langage qu'il a choisi.
    J'aurais une réponse radicalement différente dans un langage réellement objet, comme Delphi, C++ ou Java, mais dans un langage procédural comme le C, l'héritage est la notion la plus complexe à mettre en place (enfin, à mettre CORRECTEMENT en place).

  11. #11
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Bonjour et merci de ces réponses fournies !

    En ce qui concerne mon niveau, en effet j'ai fait du C bas niveau (sur puce) et durant mes études pour coder des algo.
    Bref, comme je me débrouille pas mal en java, j'avais envie de voir si je pouvais recycler une partie de mes compétences java sur du C ou s'il fallait que je ré-apprenne à marcher et cela surtout au niveau de la conception d'un programme.
    Si vous avez des commentaires ou des conseils je suis preneur !

    merci

  12. #12
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par philippe13 Voir le message
    Bonjour et merci de ces réponses fournies !

    En ce qui concerne mon niveau, en effet j'ai fait du C bas niveau (sur puce) et durant mes études pour coder des algo.
    Bref, comme je me débrouille pas mal en java, j'avais envie de voir si je pouvais recycler une partie de mes compétences java sur du C ou s'il fallait que je ré-apprenne à marcher et cela surtout au niveau de la conception d'un programme.
    Si vous avez des commentaires ou des conseils je suis preneur !

    merci
    Comme dit plus haut, de base, le langage C est un langage procédural, rien ne t'empêche maintenant d'avoir une approche objet en C, comme je l'ai dit, l'héritage simple est simple à gérer en C, moyennant le cast qui va bien, et on peut pratiquement implémenter tous les concepts objets en C, certains ont déjà des travaux bien avancés dans ce domaine, notamment Laurent deniau : http://ldeniau.web.cern.ch/ldeniau/oopc.html.
    Cordialement.

  13. #13
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    merci beaucoup et bonne soirée

Discussions similaires

  1. Déclaration de pointeur de fonction et structure
    Par ShaiLeTroll dans le forum Delphi
    Réponses: 28
    Dernier message: 05/04/2007, 10h48
  2. Réponses: 9
    Dernier message: 14/01/2007, 16h40
  3. structures et pointeurs de fonctions
    Par aimad41 dans le forum C
    Réponses: 5
    Dernier message: 21/11/2006, 10h49
  4. Structure, pointeur et fonction...
    Par Linaa dans le forum C
    Réponses: 15
    Dernier message: 04/12/2005, 13h12
  5. Pointeur de fonction et structure
    Par Trunks dans le forum C
    Réponses: 6
    Dernier message: 07/10/2005, 00h32

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