const string & Class::Methode() - C++ - Programmation
Marsh Posté le 09-09-2003 à 21:47:56
Code :
|
Marsh Posté le 09-09-2003 à 22:14:48
est-ce que si on compare 2 références d'objets avec l'opérateur == il va comparer les références ou comparer les 2 objets avec leur opérateur == ?
Marsh Posté le 09-09-2003 à 22:22:28
les références n'existe pas vraiment, ce ne sont pas des objets, mais des alias. donc toute manipulation agit comme avec l'objet
Marsh Posté le 10-09-2003 à 00:16:36
G pas compris ce qui posait pb ds le code de BlackGoddess
Marsh Posté le 10-09-2003 à 09:30:13
const string & GetString()
=>>
const string & GetString() const
Marsh Posté le 10-09-2003 à 09:48:36
bin c ce qui embetait mon compilo en tout cas, j'ai essayé :
const string & get()
{
return this->s;
}
ca marchait toujours pas, puis j'ai essayé :
const string & get() const
{
return s;
}
ca marchait !?
Marsh Posté le 10-09-2003 à 09:49:47
Fait voir le bout de code où tu appelais la méthode.
Marsh Posté le 10-09-2003 à 09:51:10
mmh je l'ai pas ici, je le posterais ce soir de chez moi
Marsh Posté le 10-09-2003 à 21:21:25
Code :
|
ce sont des bouts de code de divers fichiers.
(les def de classes sont pas entières, j'ai mis que la partie dont on parle)
Marsh Posté le 10-09-2003 à 23:53:17
Bon, ma connaissance du C++ est plus théorique que pratique, mais le pb initial n'était pas plutôt une absence de cast :
const string & GetString()
{
return str;
}
au lieu de :
const string & GetString()
{
return (const string)str;
}
(je m'excuse d'utiliser les cast style C, je ne maitrise pas encore les nouveaux)
Et du coup, je ne comprend pas comment le rajout du const à la fin de la déclaration a pu supprimer l'erreur de compil ???
Je croyais qe ça ne servait qu'à autoriser l'appel de la fonction sur des objets constants.
Merci de m'éclairer ...
Marsh Posté le 11-09-2003 à 01:40:49
1) jamais de cast en C
2) quand on ne sait pas et qu'on ne maitrise rien, il vaut mieux de mander un commentaire de code plutot que de sortir une ignominie
3) les cast sont des trantypages, pas des modificateurs de qualificatifs
4) const_cast le mal nommé fait sauter cette constance. dans les programmes de débutant, son utilisation indique une erreur de conception à coup sur
5) pas besoin de cast ici (voir 1, 2, 3, 4)
6) programmer c'est tout sauf chercher à supprimer les messages d'erreur.
Citation : ma connaissance du C++ est plus théorique que pratique |
le genre de bidouille que tu nous montre indique clairement le contraire. en plus tu aurais la mention "code sans effet"
désolé d'être cassant, mais je tenais à justifier un peu vu le strike, mais il est tard, alors je prends pas de pinceaux
Marsh Posté le 11-09-2003 à 07:57:00
ReplyMarsh Posté le 11-09-2003 à 08:15:37
Ptet qu'il veut lui peindre un "n00b" sur le front
(sans vouloir vexer le type et d'ailleurs j'ai meme pas le courage de page down pour voir son nick)
Marsh Posté le 11-09-2003 à 08:47:34
Bon,
Réponses à Taz :
1), 3) et 4) G pas dit qu'il fallait caster à tout bout de champ, je demande juste si c t pas ça le pb. J'aurais aussi pu virer le const dans le type retourné
6) Evidemment, mais ça peut être utile de les comprendre, non ?
2) Je n'ai fait que demander une explication, que je sache, pas proposer la solution du siècle, étant donné que je ne maîtrise pas
5) Au final, g tjs pas compris le pb. Vive la pédagogie !
Marsh Posté le 11-09-2003 à 09:01:02
J'en profite pour reposer mes questions une dernière fois, au cas où.
Pkoi ça ne marche pas (hypothèse : à cause du const ?) :
const string & get()
{
return this->s;
}
Alors que ça marche :
const string & get() const
{
return s;
}
Dans la 2ème version, le "const" de la fin n'est pas destiné simplement à autoriser l'appel de la fonction sur des objets constants ?
Marsh Posté le 11-09-2003 à 13:42:05
c'est ça. donc on comprends clairement que const this ou pas const, il n'y a aucun problème a renvoyer une const & (la réciproque est fausse)
Marsh Posté le 11-09-2003 à 18:00:53
Citation : Dans la 2ème version, le "const" de la fin n'est pas destiné simplement à autoriser l'appel de la fonction sur des objets constants ? |
-> ah voilà l'explication , je me demandais a quoi il servait
Marsh Posté le 11-09-2003 à 18:41:58
Enidan a écrit : |
A moins que mon cerveau n'soit mort, les deux devraient fonctionner.. simplement qu'il faudra toujours copier le string si tu veux le modifier, que l'instance de la classe soit constante ou pas..
Marsh Posté le 11-09-2003 à 18:46:36
Ashe2 a écrit : |
bien sur que les deux fonctionnes, c'est BlackGodess qui sait plus ce qu'il raconte
Marsh Posté le 11-09-2003 à 19:50:13
lool v faire un test pour être sur qd mm
Marsh Posté le 11-09-2003 à 19:52:48
on doit être capable de dire si un code est bon ou pas, le compilo est un idiot
Marsh Posté le 11-09-2003 à 20:43:27
ah ? bien puis-je poser des bouts de code pour avoir votre avis dessus alors ?
Marsh Posté le 11-09-2003 à 20:44:43
BlackGoddess a écrit : ah ? bien puis-je poser des bouts de code pour avoir votre avis dessus alors ? |
attention, ne laissa pas trainer tes cochoneries n'importe où
Marsh Posté le 11-09-2003 à 20:47:19
il y a un endroit particulier pour les poster ?
Marsh Posté le 11-09-2003 à 22:49:37
chrisbk a écrit : Poste les en spoiler alors |
ca veut dire quoi en spoiler ?
Marsh Posté le 11-09-2003 à 22:50:49
Reply
Marsh Posté le 09-09-2003 à 21:43:11
bonsoir,
j'ai une classe qui contient une chaine std::string, et je voudrais qu'un de ses méthodes retourne un référence de cette chaine car -dites moi si c'est faux- retourner une référence ne devrait pas copier la chaine pour la retourner à l'appelant ?
lorsque je compile la définition de classe, pas d'erreur, mais lorsque je compile du code qui appelle cette méthode(la 2eme partie), erreur de cast...
je suppose que c'est parce que GetString doit retourner une référence mais renvoit l'objet lui-même, comment faire pour renvoyer une référence de str ?
---------------
-( BlackGoddess )-