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 :

question sur les pointeurs


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par d�faut question sur les pointeurs
    Bonjour, on m'avait dit un jour qu'on pouvait �viter l'�criture des pointeurs en C++ pour ne pas �crire comme en C. Par exemple, avec le passage par r�f�rencement dans une m�thode :

    Ecran::affichage(const float &couleur) {...}

    Lorsque j'instancie un object (ici roue) dans un autre objet (ici voiture) je fais comme �a :

    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
    Class::Voiture() {
     
    public:
        Voiture();
     
    private:
        Roue *roue;
    }
     
    Voiture::Voiture() {
        roue = new Roue(4);
    }
     
    Voiture::status() {
        std::cout << roue->taille() << std::endl;
    }
    Ma question est la suivante, puis-je �viter d'avoir un pointeur sur roue ?

    Merci d'avance :-)

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Salut,

    oui tu n'as aucun int�r�t au pointeur ici : tu n'utilises pas de polymorphisme et le cr�es lors de l'appel au constructeur.
    Tu peux donc simplement d�clarer ta variable membre comme ceci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    Class::Voiture() {
     
    public:
        Voiture();
     
    private:
        Roue roue;
    };
    Et l'initialiser via la liste d'initialisation (obligatoire si le constructeur de Roue prend des param�tres)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    Voiture::Voiture()
      : roue(4)
    {}
    Et dans tous les cas, un unique_ptr sera pr�f�rable � un pointeur nu : un unique_ptr est responsable de la lib�ration du pointeur, tu enl�ves donc l'ambiguit� de savoir � qui revient la responsabilit� de le faire.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par d�faut
    Merci, en effet j'utilise les pointeurs intelligents pour �viter les fuites m�moires ...

    Mais lorsque j'�cris

    private:
    Roue roue;

    puis roue(4) dans le constructeur, il me semblait que �a m'instanciait 2 fois l'object avec un premier appel au constructeur par d�faut, puis un appel au constructeur sp�cifique ?

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    D�cembre 2015
    Messages
    1 599
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : D�cembre 2015
    Messages : 1 599
    Par d�faut
    La vie d'un objet commence par l'appel du constructeur et se termine par l'appel du destructeur. Un objet ne peut �tre instanci� qu'une fois, et sauf appel explicite douteux du destructeur ce dernier n'est aussi appel� qu'une fois.
    La construction des membres se fait avant l'ex�cution du corps du constructeur, et justement comme te l'a dit Bousk, on peut pr�ciser comment ils doivent �tre construits gr�ce � la liste d'initialisation qui sert justement � cel�.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Obj {
       std::string x;
       std::string y;
       std::string z = "3";
       Obj() : y("1") {  // x est construit vide, y est construit avec "1", z est construit avec "3"
          x = "2";       // Puis x est modifié, il aurait pu être pré-initialisé
       }
       ~Obj() {
          z.clear();  // évidemment inutile car
       }              // z est détruit, y est détruit, puis x est détruit
    };

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par d�faut Merci
    Merci, c'est plus clair maintenant, j'ai compris.

    J'avais un probl�me de conception, dans le codage de mes constructeurs par d�faut et du coup je ne pouvait modifier l'objet.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par d�faut zut
    J'ai une nouvelle petite question :

    Maintenant dans mon armature.h, j'ai :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Armature::Armature(cv::Mat &Image): Image_(Image) {}
    Je veux que l'adresse de Image_ soit la m�me que Image. Mais dans ce cas pr�cis, il s'agit d'une copie d'objets non ?

    Merci d'avance

  7. #7
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Si tu veux partager l'objet, il faut utiliser un pointeur ou une r�f�rence. Le mieux, pour la notion de partage, �tant probablement le shared_ptr.

Discussions similaires

  1. Question sur les pointeurs g�n�riques
    Par mikedavem dans le forum C
    R�ponses: 16
    Dernier message: 24/05/2006, 11h56
  2. question sur les pointeurs
    Par jd.baculard dans le forum Langage
    R�ponses: 3
    Dernier message: 18/03/2006, 02h30
  3. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum D�buter
    R�ponses: 3
    Dernier message: 11/01/2006, 09h55
  4. Question sur les pointeurs.
    Par Chrisemi dans le forum C++
    R�ponses: 5
    Dernier message: 28/10/2005, 23h47
  5. questions sur les pointeurs
    Par Hyoga dans le forum C++
    R�ponses: 17
    Dernier message: 08/01/2005, 23h25

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