c++ : le mot const

sisier

Grand Maître
Bonjour,

Apres le C, je me remet tout doucement au C++.
Mais il y a une notion que j'ai du mal à aborder. C'est l'utilisation du mot const.

Par exemple, ici :

[cpp]main.cpp

int main(void)
{

String s1("azerty"), s2('q');

String s3=s1+s2;
}[/cpp]


[cpp]
cstring.h

class String
{
char * chaine;
int longueur;
public :
String(char *);
String(char );
String(const String & ); // contructeur par recopie
~String();
char * getString();
String operator+(String );
String operator+(char );
String & operator=(String );


};[/cpp]


[cpp]cstring.cpp

String::String(const String & copieChaine)
{
longueur = copieChaine.longueur;
chaine = new char[longueur];
int i;
for(i=0;i<=longueur;i++)
{
chaine = copieChaine.chaine;
}
}[/cpp]

Si,je ne met pas le mot const pour le constructeur par recopie : cela ne marche pas
[cpp]main.cpp:16: error: no matching function for call to `String::String(String)'
Cstring.h:10: error: candidates are: String::String(String&)
Cstring.h:9: error: String::String(char)
Cstring.h:8: error: String::String(char*)[/cpp]

J'ai un peu de mal à comprendre l'erreur.
Merci pour votre aide :)
 

KangOl

Grand Maître
le mot clé const s'applique a ce qui se trouve juste avant (ou a défaut, ce qui se trouve après)

ici, cela veux juste dire que tu recois une référence constante vers un object String


et sinon qu'est-ce que tu as contre std::string ?
 

sisier

Grand Maître


oui, si j'ai bien compris ca veut dire alors qu'on empeche de modifier dans la fonction l'adresse vers laquelle pointe la reference.

Mais ce qui m'embete, c'est comment je peux savoir que je devais mettre ce mot clé?



Non, c'est juste des exercices pour m'entrainer ;)
Mais c'est bon à savoir qu'il existe une classe pour faire ça ;)
 

KangOl

Grand Maître
bha faut toujours essayer de passer par des const ref quand la methode ne modifie pas l'objet qu'on lui passe
 

sisier

Grand Maître


Merci pour tes conseils :)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 852
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut