SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Interloper en Lunes 2 de Agosto de 2004, 15:44

Título: ¿es Posible Declarar Funciones En Modo Infijo?
Publicado por: Interloper en Lunes 2 de Agosto de 2004, 15:44
Buenas!

Soy un estudiante de informática, y me gustaría saber si existe alguna manera de declarar funciones y métodos de forma infija (por ejemplo, funciones del tipo >= ), ya que me serían de gran utilidad a la hora de trabajar con TADS, estructuras de datos y templates.

La idea sería poder sobrecargar las funciones de comparación (menor, menor o igual,. mayor, mayor o igual), a fin de poder utilizar facilmente estructuras implementadas mediante templates, y que el funcionamiento fuese el deseado.

He estado mirando en unos cuantos libros, y no he encontrado nada, y debido a las fechas, me resulta imposible contactar con cualquier profesor de mi facultad que me resuelva la duda... y la idea sería disponer de la respuesta para poder trabajar con ello durante este mes.

Un saludo, y muchas gracias!
Título: Re: ¿es Posible Declarar Funciones En Modo Infijo?
Publicado por: nicokiki en Lunes 2 de Agosto de 2004, 19:19
Hola!!!!!!!!!!!!!

Si vos queres hacer funciones que representen a un operador, podes hacerlo sin problema pero no con el nombre ">=" ó "=" o lo q sea.
Si vos queres hacer eso, deberas sobrecargar esos operadores, pero solo se hace en clases. Si vos haces un template, podes sobrecargar el operador q sea (salvo el *, el -> y algun otro no sobrecargable) y de esa manera habras solucionado lo q querias

Salu2!!!!
Título: Re: ¿es Posible Declarar Funciones En Modo Infijo?
Publicado por: Interloper en Martes 3 de Agosto de 2004, 19:11
¿Pero puedo declarar funciones de manera que un argumento vaya antes del nombre de la función y otro despues? Si es así... ¿Como se hace?
Título: Re: ¿es Posible Declarar Funciones En Modo Infijo?
Publicado por: Noel Solw en Miércoles 4 de Agosto de 2004, 09:16
A continuacion un ejemplo de funcion "infija" :

class Complex
{
   private:

      float real,
            imag;
   public:
      Complex(float,float);
      Complex(const Complex &);
      ~Complex();
      Complex operator=(const Complex);
      Complex operator+(const Complex) const;
      Complex operator-(const Complex) const;
      Complex operator*(const Complex) const;
      Complex operator/(const Complex) const;
      friend ostream &operator<<(ostream &,const Complex &);
};   // COMPLEX

Complex Complex::operator+(const Complex right) const
{
   Complex ret;                    // *this + right
   ret.real = real + right.real;
   ret.imag = imag + right.imag;
   return ret;
}   // OPERATOR COMPLEX + COMPLEX


aplicacion:

Complex a,b,c;

c = a + b;

cout << c << endl;