Hola a todos!
Estoy tratando de aprender por mi misma los elementos básicos de C++.
He buscado en la web una respuesta a la siguiente duda, pero no la he hallado.
Quizás este problema no tiene solución.
Es posible traspasar un operador a un template de modo tal que el operador no solamente sea sobrecargado sino que a la vez sea reemplazado por otro, y de ese modo no sea necesario tener que repetir el mismo código solo por cambiar la operación, o sea, algo como esto:
etc....
A continuación les dejo el código. Es uno sencillo del que muchos similares pueden encontrarse en libros y en la web:
Ese código me gustaría poder reescribir más o menos como sigue, de modo que sea posible traspasar al templete el operador:
Es posible realizar una hazaña de ese tipo?
Estoy tratando de aprender por mi misma los elementos básicos de C++.
He buscado en la web una respuesta a la siguiente duda, pero no la he hallado.
Quizás este problema no tiene solución.
Es posible traspasar un operador a un template de modo tal que el operador no solamente sea sobrecargado sino que a la vez sea reemplazado por otro, y de ese modo no sea necesario tener que repetir el mismo código solo por cambiar la operación, o sea, algo como esto:
Código (cpp) [Seleccionar]
Num operator +(const Num &p1,const Num &p2)
{
Num erg;
erg.a = p1.a + p2.a;
erg.b = p1.b + p2.b;
return erg;
}
Num operator *(const Num &p1,const Num &p2)
{
Num erg;
erg.a = p1.a * p2.a;
erg.b = p1.b * p2.b;
return erg;
}
Num operator -(const Num &p1,const Num &p2)
{
Num erg;
erg.a = p1.a - p2.a;
erg.b = p1.b - p2.b;
return erg;
}
etc....
A continuación les dejo el código. Es uno sencillo del que muchos similares pueden encontrarse en libros y en la web:
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
class Num
{
public:
double a, b;
};
Num operator +(const Num &p1,const Num &p2)
{
Num erg;
erg.a = p1.a + p2.a;
erg.b = p1.b + p2.b;
return erg;
}
int main()
{
Num num1;
num1.a=1;
num1.b=75;
Num num2;
num2.a=150;
num2.b=175;
Num num1und2 = num1 + num2;
cout << "num1 " << "a: " << num1.a << ", b: " << num1.b << endl;
cout << "num2 " << "a: " << num2.a << ", b: " << num2.b << endl;
cout << "num1und2 " << "a: " << num1und2.a << ", b: " << num1und2.b << endl;
return 0;
}
Ese código me gustaría poder reescribir más o menos como sigue, de modo que sea posible traspasar al templete el operador:
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
class Num
{
public:
double a, b;
};
template<operator op> // * Algo por este estilo
Num operator op(const Num &p1,const Num &p2)
{
Num erg;
erg.a = p1.a op p2.a; // * Donde dice op que sea reemplazado por el operador deseado
erg.b = p1.b op p2.b; // * Donde dice op que sea reemplazado por el operador deseado
return erg;
}
int main()
{
Num num1;
num1.a=1;
num1.b=75;
Num num2;
num2.a=150;
num2.b=175;
Num num1und2 = num1 + num2; // * Modificando acá el operador que cambie arriba la operación
cout << "num1und2 " << "a: " << num1und2.a << ", b: " << num1und2.b << endl;
return 0;
}
Es posible realizar una hazaña de ese tipo?