Advertisement
Guest User

Untitled

a guest
Oct 21st, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. /**
  2. * Exercice 3
  3. Ecrire la classe String qui permet de stocker une chaine de caractères sous forme de mémoire allouée dynamiquement.
  4. class String
  5. {
  6. public:
  7. ...
  8. private: char *ch;//zone de mémoire alllouée dynamiquement (new) dans laquelle on
  9. //stocke la chaine de caractères
  10. };
  11. Ecrire un constructeur qui initialise l’objet à partir d’une chaine (const char*) reçue en
  12. paramètre : il alloue pour l’objet une zone mémoire dans laquelle il copie la chaine reçue.
  13.  
  14. Lorsque le compilateur détruit une variable de type String, n’y a-t-il pas une action
  15. supplémentaire à faire, à la charge du programmeur ?
  16.  
  17. Ecrire une fonction d’affichage.
  18.  
  19. Ecrire une fonction qui change en majuscule chaque caractère de la chaine : on utilisera la
  20. fonction de <ctype.h> char toupper (char) qui retourne la majuscule correspondant au
  21. caractère en paramètre.
  22.  
  23. Faire l’essai suivant montrant que le constructeur par copie crée par le compilateur ne
  24. convient pas :
  25.  
  26. • Créer un objet String s1 et construire s2 par copie de s1 ; puis changer s2 en majuscules
  27. et afficher s1 et s1 ;
  28.  
  29. • Constater le problème : s1 est aussi changé en majuscules.
  30.  
  31. Ecrire un constructeur par copie approprié et constater que le programme fonctionne alors
  32. correctement.
  33.  
  34. * */
  35.  
  36. #include <iostream>
  37. #include <ctype.h>
  38. #include <string.h>
  39.  
  40. using namespace std;
  41.  
  42.  
  43.  
  44. class String
  45. {
  46. public:
  47. String();
  48. String(const char *chaine);
  49. ~String();//Free Destructeur
  50. void affiche()const;
  51. void Maj();
  52.  
  53.  
  54. private: char *ch;//zone de mémoire alllouée dynamiquement (new) dans laquelle on
  55. //stocke la chaine de caractères
  56. };
  57.  
  58. String::String(const char *chaine)
  59. {
  60. ch = new char[strlen(chaine)];//(équivalent au malloc ce qui veux dire on doit faire un équivalent au Free afin de libérer l'espace mémoire')
  61.  
  62. strcpy(ch,chaine);
  63. }
  64.  
  65. String::~String()//Destructeur(Free)
  66. {
  67. delete [] ch;
  68. }
  69.  
  70. void String::affiche()const
  71. {
  72. cout << "Chaine : " << ch << endl;
  73. }
  74.  
  75. void String::Maj()
  76. {
  77. int i=0;
  78. while( ch[i] != '\0' )
  79. {
  80. ch[i] = toupper(ch[i]);
  81. }
  82. }
  83.  
  84. int main(void)
  85. {
  86. String s1("hello");
  87.  
  88. s1.affiche();
  89.  
  90. String s2=s1;//Appel du constructeur par recopie
  91. s2.affiche();
  92.  
  93. s1.Maj();
  94. s1.affiche();
  95. s2.affiche();
  96.  
  97.  
  98. return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement