Back
Close

Miembros Especiales de la Clase en C++ (Práctica 2)

camilocorreaUdeA
1,856 views

Operadores sobrecargados y métodos de conversión

Los operadores son símbolos (o palabras) que representan y ejecutan una operación en C++. Hay distintos tipos de operadores que están clasificados de acuerdo al número de operandos sobre los que operan. Luego, hay operadores "unitarios" que reciben un solo operando, por ejemplo el operador sizeof, el operador NOT ~. Operadores "binarios" que reciben dos operandos, por ejemplo +,-,&&,%, y operadores "ternarios" que reciben tres operandos, de hecho en C++ solo hay uno y es el operador ?:.

Así como se puede sobrecargar funciones en C++ también se puede sobrecargar operadores para que tengan una funcionalidad distinta a la original o para que puedan ser implementados en tipos de datos que no los soportan de forma nativa, como las clases que implementa un desarrollador. Es importante mencionar que C++ permite sobrecargar CASI TODOS los operadores existentes pero NO PERMITE implementar nuevos operadores.

Los operadores de C++ se sobrecargan como si se tratara de la sobrecarga de una función (tipo de dato de retorno + nombre + lista de parámetros de entrada), con la única diferencia de que en lugar del nombre de la función se utilizar la palabra operator acompañada del símbolo que designa al operador. Por ejemplo, para implementar una sobrecarga del operador * para que "multiplique" objetos de la clase MyClass:

#include<iostream>
using namespace std;
class MyClass
{
int x;
public:
MyClass(int n):x(n){}
int operator*(const MyClass& a) const //Sobrecarga del operador '*'
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

En el ejemplo a continuación se sobrecargan los operadores de las operaciones matemáticas básicas para implementar dichas operaciones en la clase MiVector3D:

Ejemplo operadores sobrecargados en la clase MiVector3D
/* mivector.h */
#ifndef _MY_VECTOR3D_H
#define _MY_VECTOR3D_H
class MiVector3D
{
public:
double vec[3];
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

A ver que aprendimos...

¿Cuál de las siguientes es una sobrecarga del operador [ ] corchetes para que se pueda averiguar/modificar el valor de una componente del arreglo de la clase MiVector3D sin necesidad de hacer el arreglo público y tener que acceder con el operador punto?

Métodos de conversión

Los métodos de conversión son funciones de una clase A que convierten (hacen un "casting") un objeto de la clase A en el tipo de dato que se especifique en el método. Se implementan como una sobrecarga de operador, pero en lugar del símbolo de un operador se usa el tipo de dato hacia el cual se quiere realizar la conversión. Para implementar una función de conversión se utiliza la palabra operator, luego el tipo de dato al que se requiere convertir y con la lista de parámetros de entrada vacía ya que un método de conversión no recibe ningún argumento. Tampoco se especifica un tipo de dato de retorno. Ejemplo:

#include<iostream>
using namespace std;
class MyClass
{
int x;
public:
MyClass(int a):x(a){}
operator int(){ return x; } //Método de conversión, convierte un objeto de la clase MyClass en un entero (int)
};
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io
codingame x discord
Join the CodinGame community on Discord to chat about puzzle contributions, challenges, streams, blog articles - all that good stuff!
JOIN US ON DISCORD
Online Participants