[C++] Compréhension des const

Compréhension des const [C++] - C++ - Programmation

Marsh Posté le 17-05-2004 à 21:13:24    

Voilà je suis dans les const. Je suis le support de cours d'Antoine Mahul (http://frog.isima.fr/antoine/avance.shtml).
 
Ya un truc qui m'echappe. Si vous pouviez m'expliquer ce serait sympa..
Voilà son explication:
 

Code :
  1. const double pi = 3.14159; // Déclaration d'un double constant
  2. const double * ptr1 = 0;   // Pointeur (non constant) sur un
  3.                            // double constant initialisé au pointeur nul
  4. ptr1  = π               // OK
  5. *pi = 12;                  // Erreur (tentative de modification de  
  6.                            // l'objet pointé)
  7. const double e = 2.71828;  // Déclaration d'un autre double constant
  8. ptr1 = &e                  // OK (modification de la valeur du pointeur)


 
le

Code :
  1. *pi = 12

me pose problème, sachant que pi n'est pas un pointeur, je ne vois pas ce qu'il veut faire ?!
 
plus loin :  
 

Code :
  1. // Déclaration de deux double
  2. double x = 0.0, y = 0.0;
  3. // Déclaration d'un pointeur constant initialisé avec l'adresse de x
  4. Point *const ptr2 = &x; 
  5. *ptr2 = pi;    // OK  
  6. // (modification de l'objet pointé, x prend la valeur de pi           
  7. ptr2 = &y;     // Erreur  
  8. //(tentative de modification de la valeur du pointeur)


Je ne comprend pas pourquoi il veut mettre l'adresse d'un double dans un   pointeur de Point (Point étant une classe définie précedemment).
 
Merci de vos explications...

Reply

Marsh Posté le 17-05-2004 à 21:13:24   

Reply

Marsh Posté le 17-05-2004 à 21:16:00    

const -> constante
 
 
 *pi = 12;  
 
pi n'est pas un pointeur
 
ptr2 = &y;
 
ptr2 est const, tu ne peux lui affecter une valeur qu'à l'initialisation

Reply

Marsh Posté le 17-05-2004 à 21:20:42    

Taz a écrit :

const -> constante
 
 
 *pi = 12;  
 
pi n'est pas un pointeur
 
ptr2 = &y;
 
ptr2 est const, tu ne peux lui affecter une valeur qu'à l'initialisation


 
Ok pour expliquer mieux il aurait dû mettre  
pi=12
ou *ptr1 = 12  
pour montrer que ça merde, car si pi n'est pas const, ca ne marche pas quand même...
pour la deuxième question, mon pb c'est qu'il veut mettre l'adresse d'un double dans un pointeur vers un autre type., j'avais compris pour ptr2=&y

Reply

Marsh Posté le 17-05-2004 à 21:59:26    

dans ce cour j'au vu qu'il utilisait systematiquement endl, pour "forcer" l'affichage meme si c'est pas necessaire, seulement j'ai lu que utiliser endl a outrance (et donc tj flusher le stream) peut poser de grave probleme de performance
 
d'ailleur bjarne stroupstrup ne l'utilise pratiquement pas dans c++ third edition

Reply

Marsh Posté le 17-05-2004 à 22:09:46    

noté, mais ça ne répond pas à ma question :/

Reply

Marsh Posté le 17-05-2004 à 22:20:45    

dache33 a écrit :

noté, mais ça ne répond pas à ma question :/


 
en effet il y a erreur dans ce cours (de merde :o )
 
il fallait lire:
 

*ptr = 12


 
un peu d'imagination que diable! [:meganne]


Message édité par schnapsmann le 17-05-2004 à 22:21:09

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 17-05-2004 à 22:23:48    

si tu ve un bon cour online, je te conseil celui la
 
http://casteyde.christian.free.fr/ [...] book1.html
 
d'ailleur j'aimerais bien avoir l'avi d'autre pesonne dessus

Reply

Marsh Posté le 17-05-2004 à 22:25:47    

schnapsmann a écrit :


un peu d'imagination que diable! [:meganne]


ok, j'avais donc bien compris...
 
Sinon, pour le second problème (types différents à l'affectation), il s'est planté comme une otarie bourrée à la bière aussi?

Reply

Marsh Posté le 17-05-2004 à 22:28:03    

Sinon pour le document en lui-même, à part les erreurs sus-citées et celles que je n'ai pas vues, je le trouve clair, concis. Parfait pour la veille d'un partiel ;)

Reply

Marsh Posté le 17-05-2004 à 22:28:51    

dache33 a écrit :


Sinon, pour le second problème (types différents à l'affectation), il s'est planté comme une otarie bourrée à la bière aussi?


sans aucun doute possible  [:naughty]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 17-05-2004 à 22:28:51   

Reply

Marsh Posté le 17-05-2004 à 22:29:25    

ben ca depend ce qu'il cherche a faire,  mais ca semble sementiquement correcte, il affecte une adresse à un pointeur

Reply

Marsh Posté le 17-05-2004 à 22:30:35    

cris56 a écrit :

ben ca depend ce qu'il cherche a faire,  mais ca semble sementiquement correcte, il affecte une adresse à un pointeur


c'est bon si

typedef double Point;


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 17-05-2004 à 22:32:44    

a, ben aparament Point semble etre une agregation de 2 int ??

Reply

Marsh Posté le 17-05-2004 à 22:33:33    

non, c'est une classe Point definie en peu avant :  
class Point {
 
private:
 
  double x; // Absisse
  double y; // Ordonnee
 
public:
 
 etc...

Reply

Marsh Posté le 17-05-2004 à 22:34:42    

bon bein c'est clair alors, ça ne compile même pas donc inutile de chercher midi à quatorze heures [:icon10]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 17-05-2004 à 22:36:08    

oui mais il fait const Point origine(0, 0);
 
il faudrait alors faire const Point origine(0.0, 0.0);
sinon ya un cast, d'ailleur ca devrait balancer un waning ca

Reply

Marsh Posté le 17-05-2004 à 22:37:07    

si tu ve un cour meilleur, je repete
 
http://casteyde.christian.free.fr/ [...] book1.html  
 
ou achete un livre, c++ third edition est une reference

Reply

Marsh Posté le 17-05-2004 à 22:37:46    

cris56 a écrit :

oui mais il fait const Point origine(0, 0);
 
il faudrait alors faire const Point origine(0.0, 0.0);
sinon ya un cast, d'ailleur ca devrait balancer un waning ca


 
Mais non arretes toi avec tes casts! :o  
 
Tu peux tjrs en fair un, ça va compiler, mais faire n'importe quoi à l'éxécution.  
 


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 17-05-2004 à 22:43:32    

attend, si tu fait double n=0; ya un cast implicite, non?

Reply

Marsh Posté le 17-05-2004 à 22:45:11    

cris56 a écrit :

attend, si tu fait double n=0; ya un cast implicite, non?


bon tu pars de trop loin, j'abandonne.
désolé, a+  [:tinostar]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed