Arul Prasath Kolandasamy Ответов: 1

Перегрузка шаблонного оператора без класса для сложения и умножения комплексных чисел.


Кто-нибудь может помочь мне написать код для "перегрузки оператора шаблона без класса для сложения и умножения комплексных чисел"основная тема заключается в том, что я не должен использовать "класс", и я могу использовать структуру, и я должен использовать "шаблон" для сложения и умножения двух комплексных чисел, я пытался искать в интернете, но не нашел ни одного.

1.here is my code:
template <typename complex_t> // template inz.
// struct
struct complex
{
      complex Max(complex_t real_v, complex_t imag_v) 
      {       
// i'm not sure what i have to declare inside this function 
        
      return 0;
      }//template 
      complex()//default value
      {
      int real=0;
      int imag=0;       
      }
};
complex operator + complex (Max(a,b))
{
  complex c;
  c.real=a.real+b.real;
  c.imag=a.imag+b.imag;        
  return(c);
}  
 
complex operator ++ max(complex& c3)  // postfix increment
{   
  c3.real = c3.real + 1;
  c3.imag = c3.imag + 1;
  return c3;
}
 
//main
void main()  
{  
complex c1(1,-2),c2(2.3,19),c3;
c3=c1+c2;     
c1++;
} 


Что я уже пробовал:

я пытался искать в интернете, но не получил никакого четкого ответа, и даже я пытался написать код, но он не работает.

1 Ответов

Рейтинг:
5

CPallini

Зачем вам это нужно шаблоны для такой задачи?
Не могли бы вы показать нам свой "неработающий код"?
Вот пример глобальной (без класса) перегрузки оператора: Как перегрузить оператор opAssign глобально в C++ - Stack Overflow[^].

[обновление]
Я приведу вам пример

#include <iostream>
using namespace std;

template <typename complex_t>
struct complex
{
  complex_t real, imag;
  complex( complex_t r, complex_t i):real(r), imag(i){}
  complex():real(complex_t()), imag(complex_t()){}
};

template <typename complex_t >
complex<complex_t> operator + ( const complex<complex_t> & a, const complex<complex_t> & b)
{
  complex<complex_t> c;
  c.real = a.real + b.real;
  c.imag = a.imag + b.imag;
  return(c);
}

int main()
{
  complex <double> c1(1,-2);
  complex <double> c2(2.3,19);
  complex <double> c3 = c1 + c2;

  cout << "c3.real = " << c3.real << ", c3.imag = " << c3.imag << endl;
}



Заметим, что с тех пор C++11, вы могли бы написать
template <typename complex_t>
struct complex
{
  complex_t real{}, imag{};
  complex( complex_t r, complex_t i):real(r), imag(i){}
  complex(){}
};

вместо.

[/обновление]


Arul Prasath Kolandasamy

1. Спасибо за ваш ответ, сэр, потому что это моя задача, которую я должен выполнить.
2. вот мой код: приведенный выше

CPallini

См. мое обновленное решение.

Arul Prasath Kolandasamy

Спасибо, это работает.

CPallini

Неужели вы действительно сомневались? :-)
Добро пожаловать.