Digamos que tenemos 3 vectores de la clase Vector y queremos hacer lo siguiente:
- Código: Seleccionar todo
v1 = v2 + v3
Sin embargo, en vez de operadores queremos usar funciones:
Una opcion seria crear una funcion algo asi:
- Código: Seleccionar todo
Vector sumar( Vector, Vector )
y entonces obtendriamos:
- Código: Seleccionar todo
v1 = sumar(v2, v3)
Otra opcion, ya que estamos usando un lenguaje orientado a objetos es usar un metodo llamado "sumar" dentro de la clase Vector, resultando en:
- Código: Seleccionar todo
class Vector {
...
Vector sumar(Vector)
...
}
y luego:
- Código: Seleccionar todo
v1 = v2.sumar(v3)
Cual es la diferencia o cual es la correcta? Trabajando con un paradigma orientado a objetos, la opcion correcta es la segunda.
Pero entonces, por que existe la primera opcion, la de usar una funcion?
Para atrapar el concepto, te propongo el siguiente ejemplo: se quiere realizar lo siguiente
- Código: Seleccionar todo
v1 = v2 * 3
Dado que estamos con objetos, deberiamos usar metodos. Entonces, dentro de la clase Vector ponemos:
- Código: Seleccionar todo
class Vector {
...
Vector multiplicar(int)
...
}
Entonces resulta en:
- Código: Seleccionar todo
v1 = v2.multiplicar(3)
Joya! Pero que pasa si quiero realizar lo siguiente:
- Código: Seleccionar todo
v1 = 3 * v2
Ups! El numero 3 es un int y no puedo agregarle un metodo "multiplicar" al numero 3!
Debido a este problema, C++ permite complementar la sobrecarga usando funciones auxiliares fuera de la clase Vector. O sea, deberemos crear una funcion:
- Código: Seleccionar todo
Vector multiplicar(int, Vector)
y ahora si se puede multiplicar
- Código: Seleccionar todo
v1 = multiplicar(3, v2)
Es por eso que C++ ofrece ambos mecanismos.
Para simplificar el ejemplo, use nombres como "sumar" y "multiplicar", pero el ejemplo tiene una traduccion inmediata a la sintaxis propia de C++, o sea operator+ y operator*.
Saludos