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 :

[POO] initialiser des attributs


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 [POO] initialiser des attributs
    Bonjour à tous!

    J'ai une classe CFP (abstraite), de laquelle dérive deux classes: LPT et Antenne.

    cfp.h
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    class CFP {
    
    public:
    	CFP(Choc & c, std::string nom_cfp);
    	virtual ~CFP();
    
    	cimg_library::CImg <unsigned short> getImageVisible() const;
    	cimg_library::CImg <unsigned short> getImageIR_ref() const;
    	cimg_library::CImg <unsigned short> getImageIR_warped() const;
    
    	std::string getNomComposant() const;
    
            virtual void setImageReferenceIR() = 0;
    	virtual void setImageReferenceIR(cimg_library::CImg <unsigned short> ) = 0;
    
    	void setImageVisible();
    	void setImageVisible(cimg_library::CImg <unsigned short>);
    
    	void afficherMix();
    
    	cimg_library::CImg <unsigned short> importImageIR(int);
    
    	void lancerWarping();
    
    
    
    protected:	
    	Camera camera;
    	cimg_library::CImg <unsigned short> image_IR_ref;
    	cimg_library::CImg <unsigned short> image_IR_warped;
    	cimg_library::CImg <unsigned short> image_visible;
    
    	std::string nom_composant;
    	int zone;
    
    	Choc      & getChoc() const; 
            int getChocNum() const;
            Choc & m_choc; // référence => on ne change pas de contexte!
    
    	cimg_library::CImg <unsigned short> chargeLUT(std::string);
    
    	float coeff_mul;
    	void ajusterVisibleEtIR();
    };
    antenne.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Antenne : public CFP
    {
    public:
    	Antenne(Choc & c, std::string nom_cfp);
    	virtual ~Antenne();
    
    	void setImageReferenceIR(cimg_library::CImg <unsigned short>);
    	void setImageReferenceIR();
    };
    Mon programme tourne très bien dans son contexte. Mais j'aimerai rendre les outils que j'ai dévéloppés accessible de l'extérieur.
    En gros, il faudrait que je puisse ne pas initialiser l' attribut camera. Mais si je ne le fait pas dans la liste d'initialisation, le compilo crie. Il veut que j'appelle le constructeur.
    Si je veux surcharger ces constructeurs, ça fait un paquet de classes à surcharger aussi...

    Comment faire ? Je voudrai juste qu'il "oublie" son attribut Camera si j'en ai pas besoin !

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ben, tu ne peux.
    Tu peux soit mettre l'attribut camera dans une classe fille et n'autoriser l'utilisateur qu'à manier la classe mère, sinon tu peux définir un constructeur par défaut pour la classe Camera, un constructeur par défaut qui construit une Camera "invalide"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    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
    Citation Envoyé par Médinoc
    Ben, tu ne peux.
    Tu peux soit mettre l'attribut camera dans une classe fille et n'autoriser l'utilisateur qu'à manier la classe mère, sinon tu peux définir un constructeur par défaut pour la classe Camera, un constructeur par défaut qui construit une Camera "invalide"...
    Hum, le seul problème, c'est qu'en temps normal, toutes les classes filles ont besoin de camera, d'où sa présence dans la classe mère...

    Je vais essayer de mettre un constructeur par défault. Enfin, réessayer, ma première tentative n'était pas géniale...

    Citation Envoyé par Eusebe
    J'ai peur que ce ne soit pas possible tant que tu as un objet "Camera" dans CFP. Il faudrait le remplacer par un pointeur sur un objet Camera (que tu initialiserais à NULL si tu n'en as pas besoin).
    Hé oui, un pointeur m'arrangerai bien là !!!
    Mais pour le design, c'était bien une composition qu'il me fallait...

    Grrr, ça va me donner du fil à retordre...

    Merci Eusebe et Médinoc

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par poukill
    Hé oui, un pointeur m'arrangerai bien là !!!
    Mais pour le design, c'était bien une composition qu'il me fallait...
    Dans le design, tu avais prévu que ton CFP n'avait pas nécessairement une Camera ?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En effet, avoir directement un objet ne convient que dans une association (1,1)-(1,1).

    Si tu veux du (0,1)-(1,1), tu dois utiliser un pointeur. C'est la vie.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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
    Citation Envoyé par Eusebe
    Dans le design, tu avais prévu que ton CFP n'avait pas nécessairement une Camera ?
    Non ! C'était pas prévu de faire autrement dans mon projet. Mais ça a bien plus, alors on m'en a demandé plus...

    En effet, avoir directement un objet ne convient que dans une association (1,1)-(1,1).

    Si tu veux du (0,1)-(1,1), tu dois utiliser un pointeur. C'est la vie.
    C'était effectivement du (1,1)-(1,1) que je devais faire...

    J'ai mis un constructeur par défault sur Camera, j'ai surchargé celui de CFP, et ça marche...
    C'est pas super super propre, mais ça marche...

    Merci!

  7. #7
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    J'ai peur que ce ne soit pas possible tant que tu as un objet "Camera" dans CFP. Il faudrait le remplacer par un pointeur sur un objet Camera (que tu initialiserais à NULL si tu n'en as pas besoin).

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

Discussions similaires

  1. Ordre d'initialisation des attributs
    Par Iradrille dans le forum C++
    Réponses: 7
    Dernier message: 20/02/2013, 03h34
  2. Initialisation des attributs d'un slider à partir de données chargées dynamiquement.
    Par Drannor dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 01/03/2012, 14h55
  3. [POO] Donner des attributs inconnus aux balises
    Par Boa67 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/02/2009, 13h48
  4. [POO] Ajouter des attributs dans le constructeur
    Par Al3x dans le forum Langage
    Réponses: 6
    Dernier message: 04/11/2007, 19h39
  5. Réponses: 4
    Dernier message: 28/03/2007, 22h23

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