¿Qué es la sobrecarga del operador?
Al utilizar la sobrecarga de operadores en C ++, puede especificar más de un significado para un operador en un ámbito. El propósito de la sobrecarga de operadores es proporcionar un significado especial de operador para un tipo de datos definido por el usuario.
Con la ayuda de la sobrecarga de operadores, puede redefinir la mayoría de los operadores de C ++. También puede utilizar la sobrecarga del operador para realizar diferentes operaciones con un solo operador.
En este tutorial de C ++, aprenderá:
- ¿Qué es la sobrecarga del operador?
- Sintaxis
- Diferentes enfoques para la sobrecarga de operadores en C ++
- ¿Se pueden sobrecargar todos los operadores de C ++?
- Cosas para recordar:
- Reglas para la sobrecarga del operador:
- Cómo sobrecargar al operador:
Sintaxis
Para sobrecargar un operador de C ++, debe definir una función especial dentro de la Clase de la siguiente manera:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Aquí hay una explicación de la sintaxis anterior:
- Return_type es el tipo de retorno de la función.
- A continuación, menciona la palabra clave del operador.
- El símbolo indica que el símbolo del operador está sobrecargado. Por ejemplo, +, -, <, ++.
- Los argumentos se pueden pasar a la función del operador de la misma forma que las funciones.
Ejemplo 1:
#includeusing namespace std;class TestClass {private:int count;public:TestClass() : count(5) {}void operator --() {count = count - 3;}void Display() {cout << "Count: " << count; }};int main() {TestClass tc;--tc;tc.Display();return 0;}
Producción:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluyendo el archivo de encabezado iostream en nuestro código para usar sus funciones.
- Incluya el espacio de nombres std en nuestro programa para usar sus clases sin llamarlo.
- Cree una clase llamada TestClass.
- Utilice el modificador de acceso privado, que marca a un miembro de la clase como accesible de forma privada.
- Cree un recuento de variables enteras. Esta variable será de acceso privado.
- Utilice el modificador de acceso público, que marca a un miembro de la clase como accesible de forma privada.
- Utilice un constructor de clases para inicializar el contador de variables a 5.
- Sobrecargue el significado del operador -.
- El operador reducirá el valor de la variable x en 1.
- Fin de la sección de sobrecarga del operador. Se le ha dado un nuevo nombre al operador.
- Definición de una función denominada función Display ().
- Imprime el valor de la variable count junto con otro texto en la consola cuando se llama a la función Display (). } Marca el final del cuerpo de la función Display ().
- Fin del cuerpo de la clase.
- Llame a la función main (). La lógica del programa debe agregarse dentro de esta función.
- Cree una instancia de la clase TestClass y asígnele el nombre tc.
- Esto llamará a la función void operator - ().
- Utilice la posición de TestClass Class para llamar a la función Display ().
- La función debe devolver un valor una vez completada con éxito.
- Fin del cuerpo de la función main ().
Diferentes enfoques para la sobrecarga de operadores en C ++
Puede realizar la sobrecarga del operador implementando cualquiera de los siguientes tipos de funciones:
- Función miembro
- Función no miembro
- Función amigo
- La función de sobrecarga del operador puede ser una función miembro cuando un operando izquierdo es un objeto de la clase.
- Cuando el operando izquierdo es diferente, la función de sobrecarga del operador debe ser una función no miembro.
Puede hacer que la función de sobrecarga del operador sea una función de amigo si necesita acceder a los miembros de la clase privada y protegida.
¿Se pueden sobrecargar todos los operadores de C ++?
No. Hay operadores de C ++ que no se pueden sobrecargar.
Incluyen:
- :: -Operador de resolución de alcance
- ?: -operador alternativo.
- . -selector de miembros
- Tamaño del operador
- * selector de puntero de miembro
Cosas para recordar:
- Con la sobrecarga de operadores, puede redefinir la forma en que un operador trabaja solo para los tipos definidos por el usuario (objetos, estructuras). No puede usarlo para tipos integrados (float, char, int, etc.).
- Los operadores = y & C ++ están sobrecargados de forma predeterminada. Por ejemplo, puede copiar los objetos de la misma clase directamente usando el operador =.
- La precedencia de los operadores no cambia la asociación ni la precedencia de los operadores. Sin embargo, puede cambiar el orden de evaluación utilizando paréntesis.
- Hay cuatro operadores que no puede sobrecargar en C ++. Incluyen el operador de resolución de alcance (: :), el operador de selección de miembros (.), La selección de miembros mediante un puntero al operador de función (. *) Y el operador ternario (? :).
Reglas para la sobrecarga del operador:
Estas son las reglas para la sobrecarga del operador:
- Para que funcione, al menos un operando debe ser un objeto de clase definido por el usuario.
- Solo puede sobrecargar a los operadores existentes. No puede sobrecargar nuevos operadores.
- Algunos operadores no se pueden sobrecargar con una función de amigo. Sin embargo, estos operadores pueden sobrecargarse usando la función miembro.
Cómo sobrecargar al operador:
Ejemplo 1:
#includeusing namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}
Producción:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluyendo el archivo de encabezado iostream en nuestro código para usar sus funciones.
- Incluya el espacio de nombres std en nuestro programa para usar sus clases sin llamarlo.
- Cree una clase denominada OperatorOverload.
- Utilice el modificador de acceso privado, que marca a un miembro de la clase como accesible de forma privada.
- Cree una variable entera x. Esta variable será de acceso privado.
- Utilice el modificador de acceso público, que marca a un miembro de la clase como accesible de forma privada.
- Utilice un constructor de clases para inicializar la variable x en 10.
- Sobrecargue el significado del operador ++.
- El operador incrementará el valor de la variable x con 2.
- Fin de la sección de sobrecarga del operador. Se le ha dado un nuevo nombre al operador.
- Llamando a la función Print ().
- Imprime el valor de la variable x junto con otro texto en la consola cuando se llama a la función Print ().
- Fin del cuerpo de la función Print ().
- Fin del cuerpo de la clase.
- Llame a la función main (). La lógica del programa debe agregarse dentro de esta función.
- Cree una instancia de la clase OperatorOverload denominada ov.
- Esto llamará a la función void operator ++ ().
- Utilice la posición de la clase OperatorOverload para llamar a la función Print ().
- La función debe devolver un valor una vez completada con éxito.
- Fin del cuerpo de la función main ().
Ejemplo 2:
#includeusing namespace std;class TestClass {private:int real, over;public:TestClass(int rl = 0, int ov = 0) {real = rl;over = ov;}TestClass operator + (TestClass const &obj) {TestClass result;result.real = real + obj.real;result.over = over + obj.over;return result;}void print() {cout << real << " + i" << over << endl;}};int main(){TestClass c1(9, 5), c2(4, 3);TestClass c3 = c1 + c2;c3.print();}
Producción:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluir el archivo de encabezado iostream en nuestro programa para usar sus funciones.
- Incluya el espacio de nombres std en nuestro programa para poder usar sus clases sin llamarlo.
- Cree una clase llamada TestClass. El {marca el comienzo del cuerpo de la clase.
- Utilice el modificador de acceso privado para marcar las variables como privadas, lo que significa que solo se puede acceder a ellas desde dentro de la Clase.
- Defina dos variables enteras, reales y superiores.
- Utilice el modificador de acceso público para marcar el constructor como público, lo que significa que será accesible incluso fuera de la Clase.
- Creando el constructor de la clase e inicializando las variables.
- Inicializa el valor de la variable real.
- Inicializa el valor de la variable sobre.
- Fin del cuerpo del constructor.
- Anula el significado del operador +.
- Cree el resultado del tipo de datos de tipo TestClass.
- Utilice el operador + con números complejos. Esta línea agregará la parte real de un número a la parte real de otro número.
- Utilice el operador + con números complejos. Esta línea agregará la parte imaginaria de un número a la parte imaginaria de otro número.
- El programa devolverá el valor de la variable resultado después de una ejecución exitosa.
- Fin de la definición del nuevo significado de operador +, es decir, sobrecarga.
- Llame al método print ().
- Imprima el nuevo número complejo después de la adición en la consola.
- Fin del cuerpo de la función print ().
- Fin del cuerpo de TestClass Class.
- Llamando a la función main ().
- Pasando los valores de las partes reales y complejas a sumar. La primera parte de c1 se agregará a la primera parte de c2, es decir, 9 + 4. La segunda parte de c1 se agregará a la segunda parte de c, es decir, 5 + 3.
- Realizando una operación usando el operador + sobrecargado y almacenando el resultado en la variable c3.
- Imprimiendo el valor de la variable c3 en la consola.
- Fin del cuerpo de la función main ().
Resumen:
- Puede especificar más de un significado para un operador C ++ en un ámbito.
- A esto se le llama sobrecarga del operador.
- La sobrecarga de operador proporciona un significado especial de operador para un tipo de datos definido por el usuario.
- Puede redefinir la mayoría de los operadores de C ++ mediante la sobrecarga de operadores.
- No todos los operadores de C ++ pueden sobrecargarse.
- Para que un operador esté sobrecargado, al menos uno de los operandos debe ser un objeto definido por el usuario.
- Solo los operadores existentes pueden sobrecargarse. No puede sobrecargar nuevos operadores.