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 :

niveau d'héritage ?


Sujet :

C++

  1. #21
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Une interface java correspondrait à une ABC C++ où toutes les fonctions membre sont virtuelles pure.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  2. #22
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Je me disait aussi.
    A votre avis, l'utilisation de politiques peut elle être une solution pour limiter l'héritage.
    Pour moi non. En tout cas ce n'est pas une alternative équivalente. Une fois que tu as viré la classe de base, tu ne peux plus mettre tes animaux dans le même conteneur. Tu ne peux plus te servir que du polymorphisme statique, somme toute limité. Le remplacement de l'un par l'autre n'est généralement pas une option.

    Citation Envoyé par Mongaulois Voir le message
    - Complexité de compréhension pour une personne tierce
    - Fait peur à un client
    - Debuggage plus complexe
    - Difficulté de remodulation du code si besoin
    C'est marrant mais dans ma boîte, c'est plutôt les classes de politiques et les templates qui répondraient aux trois premiers points.

  3. #23
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Au passage, un moyen de faire du sealing (empecher la possibilitée d'heritage d'une classe) est décrit dans cet article :
    http://www.gamedev.net/reference/pro...tures/cppseal/

    Personnellement, je trouve que faire en sorte que ce soit difficile (et induire chez l'utilisateur l'idée que c'est certainement inaproprié) est largement suffisant.

  4. #24
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    template < class T >
    class SealedBase
    {
    protected:
        SealedBase()
        {
        }
    };
     
    #define Sealed(_CLASS_NAME_) private virtual SealedBase<_CLASS_NAME_>
     
    class Penguin : Sealed(Penguin)
    {
    };
    il suffit d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class BigZ : Penguin, Sealed(Penguin)
    {
    };
     
    int main()
    {
      BigZ test;
    }
    Pour que son astuce ne marche pas mieux que la premiere :p

    Et pour la deuxieme astuce (compilo M$) j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class BigZ : Penguin, private virtual SealedBase<__COUNTER__-1>
    {
    };
    Je te l'avoue, c'est tordu mais...

  5. #25
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Se servir de __COUNTER__ de cette manière est dangereux: supposons que la classe Penguin soit définie dans Penguin.h et que je définisse une autre classe Rotweiller dans Rotweiller.h. Si dans un cpp je fais un include de Penguin.h puis Rotweiller.h, __COUNTER__ vaudra respectivement N et N+1. Si dans un autre cpp j'inclus d'abord Rotweiller.h puis Penguin.h, les valeurs de __COUNTER__ ne seront plus les même. Au final, j'obtient plusieurs déclarations et définitions des classes sus-citées - ce qui provoque une phénomène du type "attention à la marche, oups, trop tard" au niveau du code...
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/08/2014, 00h07
  2. Programme d'étude sur le C++ bas niveau n°11 : Héritage
    Par germinolegrand dans le forum C++
    Réponses: 9
    Dernier message: 03/04/2014, 12h24
  3. [SP-2007] Problème d'héritage au niveau des autorisations
    Par cekamb72 dans le forum SharePoint
    Réponses: 1
    Dernier message: 14/05/2012, 14h10
  4. Ambiguité au niveau héritage
    Par fsidiosidi dans le forum Langage
    Réponses: 4
    Dernier message: 21/05/2010, 13h45
  5. problème au niveau de l'héritage, ou autre chose
    Par lotus0o dans le forum Langage
    Réponses: 5
    Dernier message: 04/06/2007, 11h54

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