[C++] opérateurs = et ()
Résolu/Fermé
A voir également:
- [C++] opérateurs = et ()
- Opera mini télécharger et installer - Télécharger - Navigateurs
- Avoir 2 opérateurs mobile - Forum Mobile
- Enregistrement des conversations téléphoniques par les opérateurs - Forum telephonie fixe
- Deux forfaits chez deux opérateurs différents - Forum Mobile
- Facetime et imessage votre opérateur est susceptible facturer - Forum iPhone
2 réponses
castors33
Messages postés
49
Date d'inscription
jeudi 2 juin 2011
Statut
Membre
Dernière intervention
18 octobre 2012
4
8 déc. 2011 à 16:08
8 déc. 2011 à 16:08
Salut,
tu peux seulement utiliser les parenthèses lors de la déclaration de la variable. Ensuite, tu dois utiliser le égal dans le reste du programme
tu peux seulement utiliser les parenthèses lors de la déclaration de la variable. Ensuite, tu dois utiliser le égal dans le reste du programme
KX
Messages postés
16741
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mai 2024
3 016
8 déc. 2011 à 16:31
8 déc. 2011 à 16:31
Les parenthèses c'est pour les constructeurs des objets.
Par exemple : Point p1(3,4);
Tu ne peux pas écrire p1 = 3,4 ça n'a pas de sens !
Le signe égal c'est pour l'affectation d'une valeur à une variable. C'est à dire que ce qui est à droite existe, et ce qui est à gauche prend exactement la même valeur.
Par exemple : Point p2 = p1;
Les deux objets p1 et p2 sont structurellement identiques, tu peux les comparer avec ==
En revanche : Point p3(3,4);
Les objets p1 et p3 ont les même valeurs mais ce ne sont pas les mêmes objets, tu ne peux pas les comparer avec == (ça te renverra false)
Ecrire : int x(1); est pour moi une erreur de compréhension de ce que l'on fait, car int n'est pas une classe. Certes le C++ est compréhensif et l'accepte mais en fait il fait int x=1.
Et quand tu fais string str = "hello"; là aussi ça marche parce que le C++ permet de faire des raccourcis dans l'écriture, mais pour être correct il faudrait faire string str("hello")
Par exemple : Point p1(3,4);
Tu ne peux pas écrire p1 = 3,4 ça n'a pas de sens !
Le signe égal c'est pour l'affectation d'une valeur à une variable. C'est à dire que ce qui est à droite existe, et ce qui est à gauche prend exactement la même valeur.
Par exemple : Point p2 = p1;
Les deux objets p1 et p2 sont structurellement identiques, tu peux les comparer avec ==
En revanche : Point p3(3,4);
Les objets p1 et p3 ont les même valeurs mais ce ne sont pas les mêmes objets, tu ne peux pas les comparer avec == (ça te renverra false)
Ecrire : int x(1); est pour moi une erreur de compréhension de ce que l'on fait, car int n'est pas une classe. Certes le C++ est compréhensif et l'accepte mais en fait il fait int x=1.
Et quand tu fais string str = "hello"; là aussi ça marche parce que le C++ permet de faire des raccourcis dans l'écriture, mais pour être correct il faudrait faire string str("hello")
Ok, donc "cout << y(5);" ne fonctionne pas parce qu'il essaie d'appeler le constructeur de y si j'ai bien compris ?
J'ai aussi deux petites questions concernant ta réponse.
1) Je n'ai pour l'instant fait qu'aborder les classes mais il me semble que lorsque je fais
Point p2 = p1
p2 est une vraie copie de p1, pas comme en java par exemple qui crée simplement une référence sur mon objet de base.
Donc, étant donné que j'ai trois objets bien distincts qu'est ce qui fait que p1 et p2 sont comparable alors que p3 ne l'est avec aucun des deux ?
2) Le fait que str = "Hello" fonctionne, c'est vraiment du à C++ qui autorise cette notation, ce n'est pas une surcharge de l'opérateur = dans la classe string ?
J'ai aussi deux petites questions concernant ta réponse.
1) Je n'ai pour l'instant fait qu'aborder les classes mais il me semble que lorsque je fais
Point p2 = p1
p2 est une vraie copie de p1, pas comme en java par exemple qui crée simplement une référence sur mon objet de base.
Donc, étant donné que j'ai trois objets bien distincts qu'est ce qui fait que p1 et p2 sont comparable alors que p3 ne l'est avec aucun des deux ?
2) Le fait que str = "Hello" fonctionne, c'est vraiment du à C++ qui autorise cette notation, ce n'est pas une surcharge de l'opérateur = dans la classe string ?
KX
Messages postés
16741
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mai 2024
3 016
8 déc. 2011 à 17:49
8 déc. 2011 à 17:49
J'avoue que je n'utilise plus beaucoup le C++ et que du coup j'ai tendance à réfléchir en Java.
Après vérification :
1) Point p2 = p1.
p2 est une copie champ par champ de p1, mais ce n'est pas une copie en profondeur.
Donc p1, p2 et p3 sont tous distincts, en revanche on ne peut pas faire == si l'opérateur n'a pas été redéfini spécifiquement pour la classe Point.
2) str = "Hello" fonctionne
Effectivement l'opérateur = a été redéfini pour accepter les char* en paramètre, donc cela vient peut-être de ça plus que de la bonne volonté du C++
Après vérification :
1) Point p2 = p1.
p2 est une copie champ par champ de p1, mais ce n'est pas une copie en profondeur.
Donc p1, p2 et p3 sont tous distincts, en revanche on ne peut pas faire == si l'opérateur n'a pas été redéfini spécifiquement pour la classe Point.
2) str = "Hello" fonctionne
Effectivement l'opérateur = a été redéfini pour accepter les char* en paramètre, donc cela vient peut-être de ça plus que de la bonne volonté du C++
8 déc. 2011 à 16:17