cs_Fr33z
Messages postés6Date d'inscriptionjeudi 17 juillet 2008StatutMembreDernière intervention17 juillet 2008
-
17 juil. 2008 à 03:41
cs_Lucky92
Messages postés180Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention16 août 2012
-
17 juil. 2008 à 19:36
Bonjour à tous,
j'aurais aimé savoir comment je peux faire pour changer la valeur "manuellement" d'un nombre complexe défini à l'aide des templates complex STL :
#include <complex>
using namespace std;
int main()
{
complex<long double> a(3,4);
//ici a vaut 3+4i
//là j'aimerai par exemple changer sa valeur à 5+6i, par exemple
}
J'aimerais pouvoir changer cette valeur sans avoir à reconstruire l'objet car cette opération doit être effectuée un grand nombre de fois et rapidement... De plus, je sais que le constructeur est surchargé , et que l'on peut séparer la déclaration de l'affectation car une instruction du type complex<long double> a; ne génère pas d'erreur... Mais que mettre après ? a=(5,6) par exemple ne fonctionne pas...
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 17 juil. 2008 à 13:30
"C'est refusé sous Visual C++ 6.0 (et heureusement car ça ne veut rien dire) !"
=> Bien sur que si, ca veut dire quelque chose. Cette syntaxe est tout a fait correcte:
a.real() = 5;
a.imag() = 6;
Puisque si vous regardez la classe Complex, vous trouvez les deux fonctions suivantes:
/// Return real part of complex number.
_Tp& real();
/// Return imaginary part of complex number.
_Tp& imag();
Ce qui rend la syntaxe ci dessus légale et normale. Peut etre que sous Visual C++ 6.0, l'implémentation est légèrement différente.
cs_Fr33z
Messages postés6Date d'inscriptionjeudi 17 juillet 2008StatutMembreDernière intervention17 juillet 2008 17 juil. 2008 à 11:09
J'utilise GNU GCC Compiler, celui par defaut avec code::blocks. Connaissez vous les avantages/désavangages de Visual c++ par rapport à code::blocks ? J'envisage de changer d'ide, et Visual c++ a l'air plus complet...
Je me disais bien que cette syntaxe était vraiment étrange.
J'ai refait des essais, et cette syntaxe n'a plus compilé. J'avais dû faire une erreur.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 17 juil. 2008 à 11:36
J'utilise Visual C++ 6.0 depuis qu'il est sorti (en 1998 je crois) et j'en suis très content (je n'utilise absolument pas la partie "Visual", je code tout --> je maîtrise tout). Il ne connaît pas les dernières nouveautés disponibles sous Windows mais je les ajoutent au fur et à mesure de mes besoins ! Bien sûr il y a des versions beaucoup plus récentes et dispo en version gratuite (mais limitée) comme Visual C++ 2008 Express.
Quant à Code::Blocks je l'ai installé il y a quelques mois pour tester une réponse faite ici et tout c'est bien passé ! Tous les codes faits sous Visual C++ testés sous Code::Blocks sont passés à un détail près concernant les déclarations des variables dans les boucles for ! (la variable est locale à la boucle avec Code::Blocks et continue d'exister après la boucle avec Visual C++, je trouve que Code::Blocks est plus "propre" dans ce cas là).
cs_Fr33z
Messages postés6Date d'inscriptionjeudi 17 juillet 2008StatutMembreDernière intervention17 juillet 2008 17 juil. 2008 à 11:42
Merci beaucoup pour ces précisions.
Je vais donc me procurer la version limitée pour me forger une opinion.
(c'est curieux pour la portée des variables, je croyais la norme c++ indique la portée de la variable à l'intérieur de la boucle...)
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 17 juil. 2008 à 14:39
Cette spécification est absurde. "fonction = qq chose" ça ne veut rien dire, c'est une absurdité sémantique : une fonction ça retourne qq chose, explicitement ou implicitement, ça ne prend pas qq chose !
Et en ce qui concerne C++ cette absurdité ne fonctionne que si la fonction retourne une référence ce qui n'est pas le cas ici sous VC++ !
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 17 juil. 2008 à 17:51
Non cette spécification est parfaitement correcte. Une fonction ca ne représente rien ! c'est uniquement son type de retour qui a un sens. Et en l'occurence il s'agit d'un référence, ou encore d'un pointeur déguisé.
""fonction qq chose" ça ne veut rien dire"> Il s'agit plutot de : "ce que la fonction retourne = qq chose"
"Et en ce qui concerne C++ cette absurdité ne fonctionne que si la fonction retourne une référence"
=> Bas oui, c'est justement le cas ici:
/// Return real part of complex number.
_Tp& real();