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

Langage C++ Discussion :

Peut-on interdire la dérivation d'une classe ?


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut Peut-on interdire la dérivation d'une classe ?
    Je sais qu'en Java c'est possible mais en C++ ?

    Merci

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Pas directement, mais tu peux jouer sur les constructeurs/destructeurs 'private' pour la rendre in-héritable dans les faits.

    Un article intéressant sur codeGuru.

  3. #3
    Membre extrêmement actif
    Profil pro
    Développeur Java Indépendant
    Inscrit en
    Mai 2007
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java Indépendant

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 333
    Par défaut
    Bonjour,

    A ce que j'ai cru comprendre, il faut mettre le constructeur en private, et faire une méthode static final* CreateInstance() qui renvoit une instance de la classe.
    Source : http://www.devx.com/tips/Tip/29062

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par tnarol Voir le message
    Je sais qu'en Java c'est possible mais en C++ ?

    Merci
    Intérêt ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 432
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Intérêt ?
    Quitte a ne pas rendre une classe efficacement derivable avec un destructeur virtuel, autant empecher clairement l'heritage.

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Héritage n'équivaut pas à polymorphisme. Comment pouvez vous prévoir à l'avance ce que va devenir la classe une fois lachée dans la nature ?

    Ca me ferait chier de ne pas pouvoir faire un héritage privé pour réutiliser du code à cause de ce genre de manipulations foireuses.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 432
    Par défaut
    Si tu n'herite pas pour le polymorphisme, alors c'est plus ou moins pour forcer l'amitie avec cette classe, si ca c'est pas une manipulation foireuse... C'est clairement une faute d'un point de vue OO.

  8. #8
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par Ubiquité Voir le message
    Si tu n'herite pas pour le polymorphisme, alors c'est plus ou moins pour forcer l'amitie avec cette classe, si ca c'est pas une manipulation foireuse... C'est clairement une faute d'un point de vue OO.
    Nan, tu es dans l'optique héritage=polymorphisme (ce qui est faux).

    Tu peux utiliser un héritage privé pour réutiliser du code (c'est une alternative à la composition) ou l'héritage protected (je n'ai pas d'exemple réel mais je me rappelle que Luc en avait croisé un).
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. [MySQL 5]Peut-on interdire l'écriture sur une seule table?
    Par *.Har(d)t dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/08/2009, 16h41
  2. L'employeur peut-il interdire l'accès à Facebook ? Une salariée d'Agfa licenciée
    Par Pierre Louis Chevalier dans le forum Droit du travail
    Réponses: 7
    Dernier message: 23/06/2009, 19h49
  3. Réponses: 0
    Dernier message: 21/06/2009, 08h55
  4. Réponses: 1
    Dernier message: 05/01/2007, 14h00
  5. Réponses: 2
    Dernier message: 27/03/2005, 16h09

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