Se connecter avec
S'enregistrer | Connectez-vous

c++ : le mot const

Dernière réponse : dans Programmation
Partagez

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 :

  1. main.cpp
  2.  
  3. int main(void)
  4. {
  5.  
  6. String s1("azerty"), s2('q');
  7.  
  8. String s3=s1+s2;
  9. }



  1. cstring.h
  2.  
  3. class String
  4. {
  5. char * chaine;
  6. int longueur;
  7. public :
  8. String(char *);
  9. String(char );
  10. String(const String & ); // contructeur par recopie
  11. ~String();
  12. char * getString();
  13. String operator+(String );
  14. String operator+(char );
  15. String & operator=(String );
  16.  
  17.  
  18. };



  1. cstring.cpp
  2.  
  3. String::String(const String & copieChaine)
  4. {
  5. longueur = copieChaine.longueur;
  6. chaine = new char[longueur];
  7. int i;
  8. for(i=0;i<=longueur;i++)
  9. {
  10. chaine[i] = copieChaine.chaine[i];
  11. }
  12. }


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


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

Autres pages sur : mot const

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 ?

KangOl a dit :
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




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é?

KangOl a dit :

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


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

KangOl a dit :
bha faut toujours essayer de passer par des const ref quand la methode ne modifie pas l'objet qu'on lui passe


Merci pour tes conseils :) 
Posez votre question