En dehors des surcharges pour des applications numériques, je ne trouve pas que l'opérateur overloading soit trés propre (mais c'est super pratique :-)
De toute manière, c'est dans ce sens là que ça a été pensé.
Autant il est plus logique d'avoir
MatriceCarre(3x3) A,B,C,D; C = A + B; D =A * B;
Maintenant si on a
Matrice(7x5) E; A=B+E;
on est dans la merde :-)
Dés qu'on s'éloigne des types atomiques (int, float, char) on se retrouve avec pleins de "cast" à programmer, et l'opérateur sera bcp trop surchargé.
Par exemple si je veux multiplier une matrice par un scalaire et multiplier 2 matrices entre elles j'aurais 2 surcharge de "*".
C'est un peu comme l'héritage :-) il ne faut pas en abuser, si on voit qu'on commence à avoir toutes les fonctions d'une classe qui sont des surcharges d'ipérateur, il est bcp plus clair pour la reprise de code ultérieure de les nomer clairement mul2matrices, mulscalmatrice, etc..
Autant une ligne de
cout toto << " " << titi << " " << tata;
est moins lisible | agréable à relire
à mon sens que
printf("%s %f.02 %c",toto,titi,tata); ou System.our.println(toto+" "+titi.toString()+" "+tata.toString());
Comme d'habitude, c'est plus une discussion sur les gouts et les couleurs qu'un réel avantage d'un type de programmation de l'un sur l'autre. :-)
Le plus important quand on programme c'est d'avoir un code consistant et de faire tout son application selon ses propres régles de programmation (si on est seul) mais de s'y tenir printf xor cout par ex, surcharger xor pas, fromage xor dessert :-)
D'ailleurs c'est marrant dans les gros projets, on peut savoir qui avait tappé tel ou tel bout de code selon son style :-)
[^] # Surcharge d'opérateur
Posté par darkleon . En réponse à la dépêche Critique de C# par James Gosling l'inventeur de Java. Évalué à 7.
De toute manière, c'est dans ce sens là que ça a été pensé.
Autant il est plus logique d'avoir
MatriceCarre(3x3) A,B,C,D; C = A + B; D =A * B;
Maintenant si on a
Matrice(7x5) E; A=B+E;
on est dans la merde :-)
Dés qu'on s'éloigne des types atomiques (int, float, char) on se retrouve avec pleins de "cast" à programmer, et l'opérateur sera bcp trop surchargé.
Par exemple si je veux multiplier une matrice par un scalaire et multiplier 2 matrices entre elles j'aurais 2 surcharge de "*".
C'est un peu comme l'héritage :-) il ne faut pas en abuser, si on voit qu'on commence à avoir toutes les fonctions d'une classe qui sont des surcharges d'ipérateur, il est bcp plus clair pour la reprise de code ultérieure de les nomer clairement mul2matrices, mulscalmatrice, etc..
Autant une ligne de
cout toto << " " << titi << " " << tata;
est moins lisible | agréable à relire
à mon sens que
printf("%s %f.02 %c",toto,titi,tata); ou System.our.println(toto+" "+titi.toString()+" "+tata.toString());
Comme d'habitude, c'est plus une discussion sur les gouts et les couleurs qu'un réel avantage d'un type de programmation de l'un sur l'autre. :-)
Le plus important quand on programme c'est d'avoir un code consistant et de faire tout son application selon ses propres régles de programmation (si on est seul) mais de s'y tenir printf xor cout par ex, surcharger xor pas, fromage xor dessert :-)
D'ailleurs c'est marrant dans les gros projets, on peut savoir qui avait tappé tel ou tel bout de code selon son style :-)