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] Hériter d'une bibliothèque


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [Héritage] Hériter d'une bibliothèque
    Bonjour à tous,

    Je travaille actuellement avec la bibliothèque de traitement d'images CImg. Je la trouve très bien et très complète. Cependant, j'aimerai rajouter des fonctions que je code moi-même...
    Je pourrai coder directement dans la librairie (sous forme d'un .h) les nouvelles fonctions membres de mon propre cru, mais en cas de mise à jour de la bibliothèque, celà pose évidemment problème.

    La solution logique est donc l'héritage. Mais j'ai une question importante à vous poser: comment créer une classe qui "renverrai" tout vers la classe mère?
    Suis-je obliger de redéfinir tous les constructeurs dans ma nouvelle classe fille?

    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
    #pragma once
     
    #include <iostream>
    #include <string>
     
    #include "CImg.h"
     
    template <typename T>
    class Image : public cimg_library::CImg<T>
    {
    public:
    	Image(); //Constructeur par défaut
    	Image(std::string nom_image); // Autre constructeur
    	~Image();
    };
    Merci à vous !

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est là où on voit que le modèle du "tout méthode" a de très grandes limites dans ces cas.
    Désolé, je ne crois pas qu'il y ait de méthode simple pour corriger ce souci.
    C'est vraiment *** quand on sait qu'on peut simplement décider de mettre tout en fonction libre qui sera ensuite capable de gérer n'importe quel type d'image...

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par poukill
    Suis-je obliger de redéfinir tous les constructeurs dans ma nouvelle classe fille?
    Pour le constructeur par défaut, ce n'est pas nécessaire (C++ en rajoutera un tout seul). Pour les autres constructeurs oui (mais il y en a tant que ça ?).

    Citation Envoyé par poukill
    comment créer une classe qui "renverrai" tout vers la classe mère?
    Là je comprends pas ! ... Tu parles toujours des constructeurs ou des autres méthodes ?

    Si c'est des autres méthodes dont tu parles, je ne vois pas le problème puisque si ta classe fille hérite, elle reprend complètement l'ensemble des méthodes de la classe mère sans rien avoir à écrire de plus ?!? ....

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Merci Miles pour ton avis.

    Ce que je cherche à faire, c'est rajouter des fonctions membres dans la classe cimg_library::CImg<T> de la bibliothèque CImg...
    Je voulais partir sur de l'héritage pour y arriver, en créant donc ma propre classe Image...
    Cette classe Image n'a pas besoin d'attributs, mais seulement de nouvelles méthodes implémentées par mes soins.

    Je n'ai pas besoin de réimplémenter les méthodes de la classe mère (bien évidemment), mais par contre il va falloir définir tous les constructeurs (au moins une dizaine)... Ca prendra pas tant de temps que ça, mais je cherchais la solution la plus "élégante" pour rajouter des fonctions à cette librairie!

    Si vous avez d'autres idées, qui pourraient faire que ça marche mieux, ou différemment, ça serait cool merci...

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Sérieusement, la seule manière propre de réaliser ce genre de choses, ce sont des fonctions libres.
    CImg est apparu dans le labo lors de notre recherche de nouvelle solution pour le traitement d'images, elle est vite partie, entre autres pour cette raison, une architecture trop fragile.

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Qu'utilises tu alors comme librairie Miles?

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    On utilise Vigra maintenant.

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par mchk0123
    Pour le constructeur par défaut, ce n'est pas nécessaire (C++ en rajoutera un tout seul).
    A partir du moment où un constructeur est défini, le compilateur n'a plus le droit d'en ajouter un par défaut.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Oui effectivement, il ne rajoute plus de constructeur par défaut dans ce cas là.

    C'est assez bizarre d'ailleurs ; je ne comprends pas ce qui l'empêcherai de le faire ?

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    A partir du moment où l'on défini un constructeur, il n'est absolument pas certain que la classe puisse être correctement initialisée sans spécifier de paramètres complémentaires. Donc on désactive le constructeur par défaut généré automatiquement. Rien n'empêche l'utilisateur d'en ajouter un s'il veut (alors que rien ne permettrai (encore) d'en enlever un).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/05/2006, 19h04
  2. Installation d'une bibliothèque
    Par Empty_body dans le forum JBuilder
    Réponses: 3
    Dernier message: 09/02/2006, 19h43
  3. Utiliser une bibliothèque statique
    Par djflex68 dans le forum MFC
    Réponses: 6
    Dernier message: 15/08/2005, 19h26
  4. Réponses: 7
    Dernier message: 25/03/2005, 14h05
  5. Réponses: 19
    Dernier message: 26/04/2004, 08h54

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