Salut à tous,
Je suis tombé sur un exo , qui va vous paraitre simple, mais que je n'arrive pas a résoudre pourriez vous m'aidez.
Expliquez pourquoi le code suivant génère une erreur de compilation.
Alors tout d'abord premier pb, pour moi strlen() et strcpy() ne peuvent s'appliquer que sur des chaines de caractères et pas directement sur leur pointeur!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class String { private : char *chaine ; int longueur ; public : String() { chaine = NULL ; longueur = 0 ; } String(const char *st) {chaine = new char [strlen(st)+1 ];longueur = strlen(st) ; strcpy (chaine, st) ; } ~String() { if (chaine) delete chaine ; } }; int main(int argc, char **argv) { String s("abc") ; cout << s ; return(0); }
Deuxième problème, pour moi donc le pb vient de là et également du cout dans le main, n'aurait il pas fallu rajouter un friend ostream& operator<<(ostream&, const String&).Est ce que je me trompe?
Ensuite,toujours à partir de la classe String, indiquez si le code suivant génère des erreurs de compilation ou sinon que se passe-t-il après l’opération s1=s3 (pour s1) si l'opérateur d'affectation = n'a pas été écrit par l'utilisateur ?
Alors pour moi l'opérateur= n'ayant pas été écrit il va donc procédé à une copie bit à bit mais les pointeur vont peut être poser problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int main(int argc, char **argv) { String s1("abc") ; String* s2 = new String(cde) ; String& s3 = *s2 ; s1 = s3 ; delete s2 ; return (0) ; }
Je sais ce que vous allé dire, la solution est de tester mais si le programme comporte une erreur de compile et que je la vois je m'acharne pour rien(en plus j'ai deja essayé de compiler et ça marche pas)
Merci d'avance.
Partager