Sobrecarga de operadores en C++. Suma, multiplicación, división... de objetos.

Sobrecarga de operadores en C++. Suma, multiplicación, división... de objetos.

Volver atrás

Publicado por |

C++ es un lenguaje orientado a objetos y, como tal, podemos añadir tipos de operaciones a nuestro programa para simplificar algunas tareas. Por ejemplo, creamos un objeto Obj que tenga dentro dos variables de tipo entero. Podemos hacer que al sumar dos de esos objetos, se realicen operaciones entre ellos para devolver un nuevo objeto. Esto se hace sobrecargando operadores.

Vamos a crear un objeto que contenga dos datos: x e y. Será un vector.

class vct {
    public:
        int x,y;
        vct(int xVal,int yVal);
        vct operator+(vct b);
};
vct::vct(int xVal,int yVal) {
    x = xVal;
    y = yVal;
}

Ahora queremos sumar dos vectores, es decir, operar con dos objetos vct. Se podría hacer la operación usando una función que tenga como parámetros dos variables de tipo vct, pero con la sobrecarga de operadores tendremos un código más limpio y elegante. Generalmente, puedes hacerlo de dos formas:

Método 1: fuera de la clase.

vct operator +(vct a,vct b) {
    vct result(a.x+b.x,a.y+b.y);
    return result;
}

Se sobrecarga el operador suma (+) para el caso en el que intervienen dos objetos vct. Se crea una variable de tipo vct que tendrá como valores la suma de las "x" y de las "y" de cada objeto. Hay una forma más rápida y más eficaz, que consiste en evitar la creación de esa variable result:

vct operator +(vct a,vct b) {
    return *(new vct(a.x+b.x,a.y+b.y));
}

Método 2: dentro de la clase.

Se define una sentencia dentro de la clase. De esta forma el primer objeto que interviene será el que se está usando. Es decir, dentro de la función de sobrecarga del operador podrás hacer uso de variables propias del objeto.

class vct {
    public:
        int x,y;
        vct(int xVal,int yVal);
        vct operator+(vct b); // Sentencia dentro de la clase.
};
vct::vct(int xVal,int yVal) {
    x = xVal;
    y = yVal;
}
vct vct::operator+(vct b) { // Función de sobrecarga del operador.
    return *(new vct(x+b.x,y+b.y));
}



Con la sobrecarga de operadores se podrá trabajar de la siguiente forma:

vct a(3,6),b(5,-2);
vct c = a+b;
La variable c será un objeto vct que en esta situación contendrá x=3+5=8, y=6+(-2)=4.


Ahora, puedes probar con objetos más complejos y sobrecargando operadores de multiplicación, división o incluso de resto.

C/C++ aprender c++operadoresclases

Programación

Redes sociales

Twitter BrainumGoogle Plus BrainumFacebook Brainum


Política de privacidad