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.
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.
Bien sûr.Est ce que l'on peut mettre dans une structure un pointeur de fonction ?
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);
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.
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Re-bonjour,
bon j'y suis arrivé...
voici le code
en fait j'essayais de définir le pointeur dans la structure ...
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); };
est ce que l'on peut avoir une approche "orienté objet" grace au structure ?
merci d'avance
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
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.
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).
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
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.
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.
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Dans l'héritage, on ne supprime aucune méthode ou attribut donc aucun problème d'alignement.
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.
On est d'accord, néanmoins pour de l'héritage simple, il n'y a pas trop de difficulté.
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.
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).
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
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.
merci beaucoup et bonne soirée
Partager