Ajout de nombres complexes à l’aide de classes

J’essaie d’append 2 nombres complexes ensemble, mais j’obtiens les erreurs suivantes:

aucun opérateur “+” ne correspond à ces opérandes

aucun opérateur “<<" ne correspond à ces opérandes

#include  using namespace std; class complex { public: double get_r() { return r; } void set_r(double newr) { r=newr; } double set_i() { return i; } void set_i(double newi) { i = newi; } private: double r, i; }; int main() { complex A, B; A.set_r(1.0); A.set_i(2.0); B.set_r(3.0); B.set_i(2.0); complex sum = A+B; cout << "summen er: " << sum << endl; system("PAUSE"); return 0; }; 

Je suis très novice en programmation, mais je ne vois pas pourquoi elle ne ferait pas la sum de ces chiffres. Qu’est ce que j’ai mal fait?

Vous devez surcharger les opérateurs + et << (et chacun dans votre besoin) pour vos classes définies. Notez que les opérateurs ne sont que des fonctions spécifiques avec une syntaxe de définition spécifique (opérateur +, par exemple: C = A + B pourrait être compris comme C = A.sum (B)). Voici un lien sur http://en.cppreference.com/w/cpp/language/operators

Operator + est défini pour les types intégrés et pour certains types de la bibliothèque standard. Comme complex est ici une classe personnalisée, vous devez définir tous les opérateurs devant agir sur celle-ci.

operator + pourrait être défini comme:

 class complex { ... complex operator + (const complex& other) { return complex(get_r() + other.get_r(), get_i() + other.get_i()); } ... }; 

Attention, cela n’autorise ni A++ ni AB . Ils auraient besoin de (resp.) complex & operator ++() ou d’ complex operator - (const complex &) .

Pour l’insertion de stream, le premier paramètre est le stream lui-même. Vous devez donc définir un opérateur ami avec 2 parameters en dehors de la classe:

 outstream& opererator << (outstream &out, const complex& val) { // output it the way you want return out; } 

Les nombres complexes font partie de la norme C ++. Voici l’exemple de http://fr.cppreference.com/w/cpp/numeric/complex .

 #include  #include  #include  #include  int main() { using namespace std::complex_literals; std::cout << std::fixed << std::setprecision(1); std::complex z1 = 1i * 1i; std::cout << "i * i = " << z1 << '\n'; std::complex z2 = std::pow(1i, 2); std::cout << "pow(i, 2) = " << z2 << '\n'; double PI = std::acos(-1); std::complex z3 = std::exp(1i * PI); std::cout << "exp(i * pi) = " << z3 << '\n'; std::complex z4 = 1. + 2i, z5 = 1. - 2i; std::cout << "(1+2i)*(1-2i) = " << z4*z5 << '\n'; } 

Essayer de mettre en œuvre vous-même un complexe de classes nécessiterait de définir les éléments add-tion, égalité et ostream. Et vous n'auriez que 5% d'une classe entièrement implémentée. En regardant l'en-tête lui-même, vous découvrirez comment ceux qui ont écrit la bibliothèque standard C ++ ont implémenté le tout.