Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 14h57   #1
humanite
 
Homme
Apprenti
Inscription : décembre 2010
Messages : 81
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Apprenti

Informations forums :
Inscription : décembre 2010
Messages : 81
Points : -1
Points : -1
Par défaut 1 rectification et transtypage d'une constante

Bonjour,

j'ai 2 questions :

1) d'abord je pense qu'il faut rectifier une phrase dans le cours en pièce jointe début page 4 , mais je souhaite avoir votre avis :

La phrase telle qu'elle est écrite :

Citation:
Les fonctions qui ont un paramètre de type pointeur disposent parfois d'une valeur, par défaut permettant .....

Ne serait-ce pas plutôt le pointeur qui peut avoir une valeur par défaut plutôt que la fonction ?


2) Par ailleurs, je ne comprends pas la partie en gras , quelqu'un pourrait-il m'expliquer ou me renvoyer vers une explication simple (fichier pdf...), voici le passage, j'ai mis en gras, ce qui me déroute :

Citation:
Les fonctions qui ont un paramètre de type pointeur disposent parfois d'une valeur, par défaut permettant à l'appelant de ne pas s'inquiéter de ce paramètre lorsqu'il n'est pas pertinent. Dans la plupart des cas, cette valeur par défaut est la constante NULL, et la fonction comporte alors des fragments de code du genre :

Code :
1
2
if (leParametre != NULL)
     * leParametre = resultat;
Un effet analogue peut être obtenu avec un paramètre de type référence , dont la valeur par défaut peut être fixée en déréférençant explicitement un pointeur NULL obtenu par transtypage d'une constante; Dans le cas d'une référence à un int, nous écrirons donc par exemple :

Code :
void fonction (int & leParametre =*static_cast<int *>(NULL));
Ceci est au début de la page 4 du fichier joint.

Merci de votre aide.
Fichiers attachés
Type de fichier : pdf L12.pdf (170,6 Ko, 10 affichages)
humanite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 15h12   #2
leternel
Expert Confirmé
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 220
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 1 220
Points : 2 596
Points : 2 596
Pour le point 1, je pense que tu as raison.

Pour le point 2, même si c'est possible, c'est affreux!
Une référence est parfaite pour dire "doit être une valeur", si on veut un NULL, on utilise un pointeur, ou une surcharge de la fonction
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 16h45   #3
r0d
Expert Confirmé Sénior
 
Inscription : août 2004
Messages : 3 673
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : août 2004
Messages : 3 673
Points : 4 436
Points : 4 436
Ce qui n'est pas dit dans ton cours, c'est que le principal avantage du passage de paramètre par référence (par opposition au passage par pointeur) est que l'on est assuré, justement, que le paramètre est valide.

Le hack donné dans ce cours permet de contourner cela: il permet de salir quelque chose de propre. Je ne suis d'ailleurs par certain que cela fonctionne sur tous les compilateurs, et je te conseillerais d'oublier ça au plus vite.
r0d est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 08/01/2013, 17h34   #4
humanite
 
Homme
Apprenti
Inscription : décembre 2010
Messages : 81
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Apprenti

Informations forums :
Inscription : décembre 2010
Messages : 81
Points : -1
Points : -1
Bonsoir,

que veut dire déréférencer un pointeur NULL ?

Merci d'avance
humanite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 18h02   #5
koala01
Modérateur
 
Avatar de koala01
 
Philippe Dunski
Inscription : octobre 2004
Messages : 8 628
Détails du profil
Informations personnelles :
Nom : Philippe Dunski
Âge : 41

Informations forums :
Inscription : octobre 2004
Messages : 8 628
Points : 13 351
Points : 13 351
Envoyer un message via MSN à koala01 Envoyer un message via Skype™ à koala01
Salut,

Honnêtement, ce cours, je me dépêcherais de le mettre à la poubelle si j'étais toi

Le simple fait de constater qu'il date de 2003 d'une part, qu'il puisse proposer ce genre de choses d'autre part, et surtout qu'il puisse voire les pointeurs avant les références ne laisse rien présager de bon quant à son contenu, laissant, au mieux, à penser qu'il aborde C++ d'une manière honnies parmi toute qu'est l'approche "C with classes"
Citation:
Envoyé par matlab_ Voir le message
Bonsoir,

que veut dire déréférencer un pointeur NULL ?

Merci d'avance
Comme tout pointeur, le déréférencement permet de récupérer ce qui est pointé par le pointeur.

Le seul truc que le cours n'indique pas, c'est que, comme NULL est une adresse invalide, le fait d'utiliser le déréférencement mènera tout droit à un comportement indéfini, dans le meilleur des cas
__________________
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
je ne répondrai à aucune question technique par E-mail, message visiteur ou message privé
Vous avez obtenu votre réponse pensez au bouton en bas de page
koala01 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 08/01/2013, 19h01   #6
backlash
Membre habitué
 
Inscription : mars 2010
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 114
Points : 119
Points : 119
Norme C++11 Chapitre 8.3.2, point 5 :
Citation:
in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the “object” obtained by dereferencing a null pointer, which causes undefined behavior.
backlash est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/01/2013, 12h00   #7
humanite
 
Homme
Apprenti
Inscription : décembre 2010
Messages : 81
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Apprenti

Informations forums :
Inscription : décembre 2010
Messages : 81
Points : -1
Points : -1
Bonjour,

dans ce cas, ce serait gentil de me proposer un cours de C++, complet, plutôt récent, et où toutes les notions sont bien détaillées et machées mais concis, et qui me permette de bien comprendre, un fichier pdf serait bien...
humanite est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 09/01/2013, 12h20   #8
white_tentacle
Membre Expert
 
Avatar de white_tentacle
 
Inscription : novembre 2008
Messages : 973
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 973
Points : 1 180
Points : 1 180
Va dans la section « Tutoriels c++ », (lien juste en bas), elle est faite pour ça
white_tentacle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 13h04   #9
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 553
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 553
Points : 4 110
Points : 4 110
Débuter (6 visiteur(s))
Forum d'entraide pour débuter en langage de programmation C++. Avant de poster : cours d'initiation au C++
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h04.


 
 
 
 
Partenaires

Hébergement Web