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] conception des classes


Sujet :

C++

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Eusebe
    Par contre, je suppose qu'il s'agit d'une faute de frappe, mais le prototype de ton constructeur dans choc.cpp n'est pas le même que dans choc.h (il manque std::string nom_cfp)
    Un oubli, j'arrete pas de tout modifier tout le temps... Merci

    Je ne comprend pas ton problème. le numéro de choc a bien été initialisé pourtant ??
    C'est pas le numero de choc le pb...
    Le problème, c'est qu'il faut que je donne au constructeur de cfp une référence au choc qui lui correspond.
    Tu me suis ?
    du genre :
    Mais comment lui donner cette instance?

  2. #182
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Ah ok, je n'avais pas en tête le prototype du constructeur de cfp

    Tu as essayé avec *this ?

    Mais je ne suis pas sûr du tout que ça fonctionne, puisque ton objet n'est pas encore complètement créé...

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Je ne pense pas que ça marche *this... C'est ce que Luc me proposait dans son code trois pages avant. Mais là c'était une composition, pas un pointeur.

    Pour moi, *this ne marche que dans la liste d'initialisation...

    Mais je ne suis pas si sur...
    Je reste preneur d'idées en tous cas!

  4. #184
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par poukill
    Je ne pense pas que ça marche *this... C'est ce que Luc me proposait dans son code trois pages avant. Mais là c'était une composition, pas un pointeur.

    Pour moi, *this ne marche que dans la liste d'initialisation...

    Mais je ne suis pas si sur...
    Je reste preneur d'idées en tous cas!
    *this n'existe pas dans la liste d'initialisation d'une classe. Ca existe à partir du moment où la classe est crée.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Au temps pour moi: c'est une bonne nouvelle Miles!

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Miles
    Oui, tu peux sauf que new CFP(...) va planter
    Au fait Miles, pourquoi ça va planter?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFP *cfp = new CFP(*this, nom_cfp);

  7. #187
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Parce que CFP a des méthodes virtuelles pures.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Oups
    Bon, je suis mal barré là.
    Je croyais que les pointeurs permettaient le polymorphisme.
    CFP ne peux pas etre instancié, mais elle ne peut pas avoir de pointeur qui lui pointe dessus alors?

    Une solution ?

  9. #189
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben, si CFP possède des méthodes virtuelles pures, c'est donc une classe abstraite: Elle n'est pas supposée être instanciée.

    Par contre, une classe abstraite est supposée avoir des classes dérivées, qui elles, peuvent être instanciées.
    Généralement, on utilise le pointeur de classe abstraite pour pointer sur une instance de la classe dérivée.
    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.

  10. #190
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Si CFP est une classe abstraite, c'est que tu ne devrais pas avoir besoin de la créer directement.

    Est-ce que tu ne peux pas dans ton choc créer un objet d'une classe héritée de CFP ?

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Médinoc
    Ben, si CFP possède des méthodes virtuelles pures, c'est donc une classe abstraite: Elle n'est pas supposée être instanciée.
    of course !

    Par contre, une classe abstraite est supposée avoir des classes dérivées, qui elles, peuvent être instanciées.
    Généralement, on utilise le pointeur de classe abstraite pour pointer sur une instance de la classe dérivée.
    Oui, j'ai souvent vu ça, donc je voulais faire pareil, mais j'ai pris le problème à l'envers...


    Citation Envoyé par Eusebe
    Est-ce que tu ne peux pas dans ton choc créer un objet d'une classe héritée de CFP ?
    Je voulais éviter, mais je n'ai pas le choix. Je vais donc partir là dessus!



    Merci à vous!

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Deux petites questions:
    1) Le construteur d'une classe fille peut-il appeler le constructeur de la classe mère abstraite?

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Antenne::Antenne( Choc &c, std::string nom_cfp)
    :CFP(c, nom_cfp)
    {
         // bla bla bla
    }
    2) Concernant le message de Luc sur mes vector: quelle solution adopter:
    a) Prendre un autre conteneur (liste ?)
    b) Utiliser un new/ delete[] (passage par pointeur)

    Merci encore (et encore...) pour vos réponses!

  13. #193
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1. oui.
    2. b) (mais sans les crochets : utilise une liste de pointeurs, voire de boost::shared_ptr)
    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.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    OK Merci Médinoc.

    1) C'est quand même bizarre: une classe abstraite ne peut etre instancié, mais possède quand même un constructeur... No comment!

    2) Hum.. Du côté de boost, pourquoi pas?
    Je vais me renseigner un peu plus sur boost::shared_ptr

  15. #195
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    1) ben non, c'est logique, il peut y avoir des variables membres à initialiser.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Une autre question de débutant:
    Comment faire pour stocker l'instance d'une classe dans une variable?
    J'illustre mon problème dans l'exemple suivant:

    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
    class CFP {
    
    public:
    	CFP(Choc & c, std::string nom_cfp);
    	~CFP();
    
    	CImg <unsigned short> getImageIR();
        virtual setImageIR(CImg <unsigned short>) = 0;
    
    	CImg <unsigned short> getImageVisible();
    	void setImageVisible();
    
    	virtual setZone(int) = 0;
    	int getZone();
    
    	void ajusterTailleVisibleEtIR();
    
    	std::string getNomComposant();
    
    private:	
    	Camera camera;
    	CImg <unsigned short> image_IR_ref;
    	CImg <unsigned short> image_visible;
    	std::string nom_composant;
    	int zone;
    
    	Choc      & getChoc()       {return m_choc; }
        Choc const& getChoc() const {return m_choc; }
        int getChocNum() const;
    
        Choc & m_choc; // référence => on ne change pas de contexte!
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CFP::CFP(Choc & c, std::string nom_cfp)
    : m_choc(c), nom_composant(nom_cfp), Camera(c, nom_cfp)
    {
    	std::cout << "Creation d'un objet CFP"<< std::endl;
    
    	zone = 0;
    	setImageVisible();
    	setImageIR();
    	ajusterTailleVisibleEtIR();
    }
    J'appelle effectivement le constructeur, mais comment stocker l'instance dans ma variable privé qui m'intéresse.
    Intuitivement, j'avais pensé à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    camera (Camera(c, nom_cfp))
    , mais je me méfie de mes intuitions parfois!

    Merci!

  17. #197
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    camera(...), comme pour tout constructeur d'une variable.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Au temps pour moi...
    Je sais, je suis loin d'être au top, mais ça viendra un jour...

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut boost
    Dans la mesure du possible, je souhaiterai utiliser boost::shared_ptr.
    Je viens de regarder le tuto de Miles: http://miles.developpez.com/tutoriel...martptrs/#LIII

    J'avoue ne pas avoir tout compris
    Quel est l'avantage d'un tableau de boost::shared_ptr? Comment ça s'utilise? (je suis un peu noyé dans les constructeurs!)

  20. #200
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    tu as un std::vector<boost::shared_ptr<CFP> > vecteurCFP et pour initialiser un élément, tu fais un vecteurCFP[i].reset(new machin(...)); ou un vecteurCFP[i] = boost::shared_ptr<CFP>(new machin(...));

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/01/2010, 08h31
  2. [POO] d’encapsulation des classe
    Par amazircool dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2007, 18h33
  3. [POO] Héritage des classes
    Par mic79 dans le forum Langage
    Réponses: 27
    Dernier message: 09/03/2007, 20h02
  4. [POO] Organisation des classes PHP
    Par AsQuel dans le forum Langage
    Réponses: 6
    Dernier message: 16/02/2007, 09h09
  5. [POO] faire des classes en php
    Par gromit83 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2006, 16h10

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