Typage en C

Plop,

L’étude de Camllight m’a fait prendre conscience du problème de typage. Le C étant assez souple là dessus, j’aurais voulu savoir quelles étaient les règles pour faire un code propre sur ce point. Si vous avez un lien, je suis preneur.

Merci d’avance :wink:
Duna

Tu ne déclare que des void* et tu utilise le cast implicite. :023

Plus sérieusement tu fais des casts explicites.

Ouch :open_mouth:
Pas très clair le résultat…

Ok, me voilà comblé. Merci :smiley:

La première fois que j’ai utilisé un cast explicite, un membre du sdz m’avait dit que c’était “bricolé” et pas beau. Ça me fait rire quand j’y repense :laughing:

Ok, me voilà comblé. Merci :smiley:

La première fois que j’ai utilisé un cast explicite, un membre du sdz m’avait dit que c’était “bricolé” et pas beau. Ça me fait rire quand j’y repense :laughing: [/quote]
En C tu n’a pas le choix (pas d’héritage etc…).
Le cast explicite te permet de réfléchir sur la nécessite et le bien fondé de ton transtypage.

Dans un langage objet je vis comme une défaite le fait d’utiliser un cast (ou alors je sais que je fais une bidouille).

[quote=“MisterFreez”]
Dans un langage objet je vis comme une défaite le fait d’utiliser un cast (ou alors je sais que je fais une bidouille).[/quote]

Pourtant Si tu utilise le polymorphisme t’est bien obligé de passer par des cast non?.
Si tu as une référence à type A parent d’un type B, tu peut référencer un objet de type B. Mais alors quand tu voudra utiliser des méthodes spécifiques au type B, ou des méthodes redéfinies par le type B, tu est obligé de faire un cast. C’est pas une bidouille.

[quote=“brendel”]Pourtant Si tu utilise le polymorphisme t’est bien obligé de passer par des cast non?.
Si tu as une référence à type A parent d’un type B, tu peut référencer un objet de type B. Mais alors quand tu voudra utiliser des méthodes spécifiques au type B, ou des méthodes redéfinies par le type B, tu est obligé de faire un cast. C’est pas une bidouille.[/quote]
Bien sûr que si c’est une grosse bidouille, ça signifie que tu as mal modélisé tes classes et que ta hiérarchie n’est pas adaptée à l’usage que tu en fais.
Cela dit je ne suis pas le dernier à le faire, mais il ne faut pas non plus se mentir à soi même. :wink:

Ok

Là tu as un problème de modélisation, si tu as besoin d’une fonction qui n’est pas défini dans A alors c’est une référence (ou un pointeur) vers B dont tu as besoin.

Le polymorphisme c’est justement ça. Si tu a B qui hérite de A et qui surcharge une fonction foo, alors ta référence va appeler la bonne fonction. Après en C++ si tu fait une redéfinition (pas de mot clef virtual) alors non le polymorphysme ne s’opère pas. C’est d’ailleurs le seul langage que je connait qui fait ça les autres langages ont toutes leurs fonctions virtuelles.

Ok si un design permet la même chose sans downcasting alors il est meilleur. N’empêche que j’appelle pas ça une bidouille dans le sens ou c’est pas forcement un truc sale qui rend le code moins lisible. On est d’ailleurs obligé de l’utiliser avec certaines interfaces de l’API Java.

[quote]

Le polymorphisme c’est justement ça. Si tu a B qui hérite de A et qui surcharge une fonction foo, alors ta référence va appeler la bonne fonction. Après en C++ si tu fait une redéfinition (pas de mot clef virtual) alors non le polymorphisme ne s’opère pas. C’est d’ailleurs le seul langage que je connait qui fait ça les autres langages ont toutes leurs fonctions virtuelles.[/quote]

Oui ok y’a pas mal de langages ou les fonctions sont virtuelles par défauts (comme tu dis c’est tout l’interet), mais ça peut être modifié.

[quote=“brendel”][quote=“MisterFreez”]

Là tu as un problème de modélisation, si tu as besoin d’une fonction qui n’est pas défini dans A alors c’est une référence (ou un pointeur) vers B dont tu as besoin.
[/quote]

Ok si un design permet la même chose sans downcasting alors il est meilleur. N’empêche que j’appelle pas ça une bidouille dans le sens ou c’est pas forcement un truc sale qui rend le code moins lisible. On est d’ailleurs obligé de l’utiliser avec certaines interfaces de l’API Java.[/quote]
Dans quel cas ? Je me souviens que C# avait des limitations qui l’obligée à cause de sa jeunesse mais je crois que c’est résolu depuis pas mal de temps maintenant.