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. #221
    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 Luc Hermitte
    Avoir un accès non contant vers une donnée privée, cela veut un peu dire que la donnée n'a pas à être privée.

    Il m'arrive de faire de telles choses. Mais je passe avant du temps à voir si les accès que je veux réaliser ne correspondent pas en fait à un nombre restreint de fonctions qui devraient être au niveau de l'objet directement englobant, ou si la donnée doit vraiment être stockée à cet endroit.
    Bref, je n'ai pas de recette miracle.
    Les recettes miracles, c'est quand on débute... après ça se gâte!
    Effectivement, c'est un peu comme si l'attribut était public... Je vais voir s'il n'y a pas moyen de placer des fonctions qui pourraient être au niveau de Choc, mais je n'y crois pas.
    CFP est une classe très importante. Les manipulations doivent être faite d'ici je pense!

    Merci à toi...

  2. #222
    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 instancier une classe
    Peut-on instancier une classe (hors liste d'initialisation) dans une fonction membre si cette classe ne fait pas parti des attributs de cette classe?

    J'aimerai écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void CFP::lancerWarping()
    {
    <div style="margin-left:40px">warping =new Warping (image_IR_ref, image_visible);
    // bla bla bla</div>}
    où Warping est une classe "non membre" de CFP?

  3. #223
    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
    Ben oui, pourquoi pas ? Tu fais bien ça tout le temps avec des int, non ?

  4. #224
    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 suis d'accord!
    Mais tu m'avais dit que l'instanciation de classe devait se faire dans la liste l'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void CFP::CFP() : warping()
    {
         std::cout << "nouvel objet cree";
    }
    C'est valable que pour un objet membre?

  5. #225
    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
    Oui, un objet qui n'appartient pas à la classe ne peut pas se faire initialiser à la construction de la classe puisqu'elle n'en a pas connaissance.

  6. #226
    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
    Est-ce que ce code est correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector< std::pair <int, int> >& PDC::getTableauDepart() const
    {
    	return &tableau_depart;
    }
    Puis dans la classe principale je l'appelle comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Warping::affichageDepart()
    {
    	std::vector< std::pair <int, int> >::const_iterator i;
    
    	std::vector< std::pair <int, int> >& depart = pdc.getTableauDepart();
    
    	for (i=depart.begin(); i != depart.end(); i++) {
    		int x = i->first;
    		int y = i->second;
            depart.draw_rectangle(x-1,y-1,x+1,y+1,red,1);
    		depart.display(depart_disp);
        }
    }

  7. #227
    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 tableau_depart est bien un pointeur vers un std::vector< std::pair <int, int> >, je pense que c'est bon.

    Edit : si comme dans ce post, tableau_depart n'est pas un pointeur vers un vector mais un vector, il ne faut pas que tu fasses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return &tableau_depart;
    mais dans getTableauDepart()

  8. #228
    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
    Est-ce que ce code est correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector< std::pair <int, int> >& PDC::getTableauDepart() const
    {
    	return tableau_depart;
    }
    Pas de & devant, on renvoie l'objet, pas un pointeur.

  9. #229
    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
    Si ta fonction est const et que l'objet que tu renvoies est un attribut de l'objet PDC, alors il te faudra renvoyer une référence constante.
    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...

  10. #230
    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
    Merci à vous trois. C'est sur ce point que j'hésitais!
    On renvoit bien une référence, c'est à dire l'objet lui même en fait...

    Je viens de résoudre de mon côté un autre problème, je vous le soumet rapidement, pour voir si c'est pas complètement débile. Je crois qu'il y a peu de règles générales, donc bcp de possibilités, mais peut-être y a t-il des choses à ne pas faire?

    J'ai une classe Warping qui fait son boulot dans le cadre de mon programme. Elle possède un constructeur avec plusieurs arguments, qui va à son tour appeler quelques fonctions membres assez spécialisées pour sauvegarder des Points de controle dans un fichier d'un nom précis, etc...
    Le problème, c'est que j'aurai bien besoin d'appeler cette Classe Warping pour autre chose plus tard! Et passer des arguments que l'on a pas, ça pose problème!

    J'ai donc pensé à une surchage de constructeur, qui va appeler à son tour des fonctions membres, toutes surchargées, car il ne faut pas faire exactement la même chose...

    Ces surcharges sont-elles une bonne idée?

    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 12 sur 12 PremièrePremière ... 289101112

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