[C++] opérateurs = et ()
Résolu
Cainro
-
Cainro -
Cainro -
Bonjour tout le monde,
je suis occupé à apprendre le C++ et j'ai un peu de mal avec ces deux opérateur( = et () ) lors de la déclaration d'une variable, comme par exemple
j'ai cru comprendre que le but des () était surtout de rendre les déclarations d'objet plus élégante, comme pour un string par exemple
donc première question, est ce uniquement dans ce but la?
Cependant si ces deux écriture sont équivalente pourquoi je n'ai pas le droit de faire ceci :
Si quelqu'un pouvait m'éclairer la dessus, Merci !
je suis occupé à apprendre le C++ et j'ai un peu de mal avec ces deux opérateur( = et () ) lors de la déclaration d'une variable, comme par exemple
int x(1); int x = 1;
j'ai cru comprendre que le but des () était surtout de rendre les déclarations d'objet plus élégante, comme pour un string par exemple
string str("hello")
donc première question, est ce uniquement dans ce but la?
Cependant si ces deux écriture sont équivalente pourquoi je n'ai pas le droit de faire ceci :
int y; cout << y(5); // alors que cout << y=5; fonctionne
Si quelqu'un pouvait m'éclairer la dessus, Merci !
A voir également:
- [C++] opérateurs = et ()
- Quels sont les préfixes des opérateurs de téléphonie mobile en france - Guide
- Opérateurs france - Guide
- Opera mini télécharger et installer - Télécharger - Navigateurs
- Opera Mini - Télécharger - Navigateurs
- Impossible d’effectuer l’opération car certains éléments ont dû être ignorés. pour chacun des éléments, choisissez fichier > lire les informations, assurez-vous que « verrouillé » n’est pas sélectionné, puis vérifiez la section partage et permissions. après avoir vérifié que les éléments ne sont ni verrouillés, ni en mode de lecture seule ou d’accès interdit, réessayez. ✓ - Forum MacOS
2 réponses
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
Cainro
oui j'ai bien compris ca, mais j'aimerais surtout savoir pourquoi, j'imagine que si je ne peux utiliser les parenthèses que lors de la déclaration de ma variable il doit bien y avoir une différence entre ces deux operateurs non ?
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 ?
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++