Partage
  • Partager sur Facebook
  • Partager sur Twitter

utilisation de pointeur dans les class c++

pointeur

    9 août 2021 à 0:32:08

    je suis débutant en programmation merci .

    je ne parviens pas à comprendre quelque chose même si sa fonctionne 

    je voudrais une explication du phénomène .

    l'exemple que je code est juste pour m'amuser avec les pointeur même si les pointeur ne sont pas les plus adapter dans ce genre de situation .

    ce que je comprend pas quand je veux accéder au membre de cette façon sa fonctionne estnombre = new int(*nouveau.estnombre);

    mais si je fais     estnombre = new int(*nouveau).estnombre); ou estnombre = new int(nouveau->estnombre); le compilateur m'affiche une erreur pourquoi  ?

    class nombre
    {
    public:
    	nombre(int);
    	void afficher();
    	~nombre();
    	nombre(const nombre&);
    	const nombre& operator=(const nombre&);
    private:
    	int* estnombre;
    
    };
    
    #include "nombre.h"
    #include <iostream>
    using namespace std;
    
    nombre::nombre(int p)
    {
    	estnombre = new int(p);
    }
    void nombre:: afficher()
    {
    	cout<<"la valeur est de "<<*estnombre<<endl;
    }
    nombre::~nombre()
    {
    	delete estnombre;
    	estnombre = 0;
    }
    nombre::nombre(const nombre& nouveau)
    {
    	estnombre = new int(*nouveau.estnombre);
    }
    
    const nombre& nombre::operator=(const nombre& nouveau)
    {
    	if( this == &nouveau)
    		return *this;
    	estnombre = new int(*nouveau.estnombre);
    	return *this;
    }



    • Partager sur Facebook
    • Partager sur Twitter
      9 août 2021 à 1:00:15

      KarlAller a écrit:

      mais si je fais     estnombre = new int(*nouveau).estnombre); ou estnombre = new int(nouveau->estnombre); le compilateur m'affiche une erreur pourquoi  ?

      Parce que ton pointeur, c'est "estnombre" et pas "nouveau". Donc le * ou le -> doivent s'appliquer sur "estnombre".

      Tu as la liste des priorités ici : https://en.cppreference.com/w/cpp/language/operator_precedence

      Dedans, tu peux voir que l'ordre est . avant * ou ->. Donc dans "*nouveau.estnombre", le point est évalué en premier et c'est équivalent à "*(nouveau.estnombre)".

      Evite d'écrire "*nouveau.estnombre". Si on se trompe sur l'ordre d'évaluation des opérateurs, on peut mal lire le code. Ecris toujours les parenthèses, pour que ton code soit explicite.

      • Partager sur Facebook
      • Partager sur Twitter

      utilisation de pointeur dans les class c++

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown