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 :

héritage en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut héritage en C
    salut tout le monde,

    J'ai lu récemment, dans un article, qu'on peut parler de la notion d'héritage en C en forçant l'adresse d'une fonction et de sa sous classe.
    Est que quelqu'un a une idée sur cette notion et qui peux mieux expliquer?

    merci d'avance.

  2. #2
    Expert confirmé
    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
    Par défaut
    Tu trouveras des informations dans les tutoriels de ce site.
    Notamment dans Programmation orientée objets en C ? et dans la deuxième partie de ce tutoriel Héritage

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par diogene Voir le message
    Tu trouveras des informations dans les tutoriels de ce site.
    Notamment dans Programmation orientée objets en C ? et dans la deuxième partie de ce tutoriel Héritage
    Je suis sceptique sur cette manière de faire de l'héritage en C, quelqu'un aurait une référence dans la norme sur la légitimité de transtyper un type structure dans un autre. Autant je sais qu'il y a une relax dans le cas de structures dans une union (6.5.2.3.5), ou encore du premier membre dans une structure (6.7.2.1.13), mais pour le cas du tutoriel, j'ai un doute.
    Cordialement.

  4. #4
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Pareil que ci-dessus. L'article ne parle pas non plus du padding que peut engendrer (ou enlever) les nouveaux membres, et la problématique que peut engendrer un transtypage.

  5. #5
    Membre expérimenté
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Par défaut
    Citation Envoyé par JulienDuSud Voir le message
    L'article ne parle pas non plus du padding que peut engendrer (ou enlever) les nouveaux membres, et la problématique que peut engendrer un transtypage.
    C'est possible ça, qu'un ajout à la fin (et non une insertion) d'un nouveau membre dans une structure puisse changer l'alignement des membres précédents ? Si c'est le cas, je pense qu'il faudrait prévenir les gens qui bossent sur GTK, qu'ils arrêtent de perdre leur temps et passent à Qt et au C++

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Ma reference favorite sur le sujet: http://ldeniau.web.cern.ch/ldeniau/html/oopc.html

    Citation Envoyé par nicolas.sitbon Voir le message
    Je suis sceptique sur cette manière de faire de l'héritage en C, quelqu'un aurait une référence dans la norme sur la légitimité de transtyper un type structure dans un autre. Autant je sais qu'il y a une relax dans le cas de structures dans une union (6.5.2.3.5), ou encore du premier membre dans une structure (6.7.2.1.13), mais pour le cas du tutoriel, j'ai un doute.
    Tu as raison d'avoir un doute. J'ai la certitude que ce n'est pas permis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    struct S1 {
       int i;
       short s;
    };
     
    struct S2 {
       int i;
       short s1, s2;
    };
    S1 peut avoir du padding a la fin et les ecritures dans S1::s considerer qu'on peut le modifier. Ce qui est plutot genant si en fait on a un S2.

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par JulienDuSud Voir le message
    Pareil que ci-dessus. L'article ne parle pas non plus du padding que peut engendrer (ou enlever) les nouveaux membres, et la problématique que peut engendrer un transtypage.
    C'est de la programmation ORIENTÉE objet, et non pas un LANGAGE objet.

    En POO, tu n'enlèves pas de membres pour commencer (=> pas de risques de "trous" dans la VMT). Et quand tu en rajoutes, c'est systématiquement à la fin, quoi qu'il arrive. En optimisant, on se retrouve avec deux tables : une pour les attributs, une pour les méthodes, et un élément présent dans une classe ancêtre reste visible dans tous les descendants.

    Côté padding, c'est plutôt facile à régler : il n'y en a pas pour les pointeurs de méthode (ben oui, c'est des mots-machine, donc alignés par défaut), et pour les attributs il n'y a pas de modification des paddings "précédents" lors de l'ajout d'un nouveau champ (qui peut avoir ou pas un padding "propre").
    Au pire, si ça devient ennuyeux, il est toujours possible de forcer le padding à une valeur quelconque.

    Après, si tu insères des méthodes / attributs n'importe où dans la "classe", forcément, c'est chercher les ennuis... Et en C, en général, on les trouve.
    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

  8. #8
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Sur le coup j'me sens un peu con d'avoir sorti ça (en même temps il était 2h :p) Je sais plus à quoi je pensais, à la portabilité je crois, mais je suis plus sûr de ce que dit la norme et de ce qu'elle ne dit pas sur l'alignement...

Discussions similaires

  1. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  2. [Héritage] Vos commentaires....
    Par Fyna dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h10
  3. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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