Sobrecarga del operador de inserción en C++

Sobrecarga del operador de inserción en C++

Sobrecarga del operador de inserción en C++ con ejemplos:

En este artículo, voy a hablar sobre la sobrecarga del operador de inserción en C++ con ejemplos. Lea nuestro artículo anterior en el que discutimos la sobrecarga del operador usando la función Friend en C++ con ejemplos.

Sobrecarga del operador de inserción en C++:

Ahora veamos cómo sobrecargar el operador de flujo de salida que es el operador ostream. Usamos cout para mostrar algunos valores en la pantalla y cin para leer algunos datos del teclado. También podemos sobrecargar los operadores cin y cout que son operadores de inserción y extracción.

En C++, el operador de inserción de flujo <> se usa para la entrada. Antes de sobrecargar estos dos operadores, primero, debemos saber lo siguiente.

  1. El cout es un objeto de la clase ostream y cin es un objeto de la clase istream
  2. Estos dos operadores deben sobrecargarse como una función global. Y si queremos que estas funciones sobrecargadas accedan a datos privados de miembros de una clase, entonces debemos declararlas como funciones amigas.
¿Cómo sobrecargar el operador de inserción en C++?

Ahora, le mostraré cómo sobrecargar el operador de flujo de inserción en C++. Entonces, tomemos un ejemplo de una clase compleja de la siguiente manera:

class Complex
{
    private:
        int real;
        int img;
    public:
        Complex (int r = 0, int i = 0)
        {
            real = r;
            img = i;
        }
};

Esta es nuestra clase Compleja. Aquí hemos escrito dos miembros de datos y un constructor parametrizado. Ahora escribamos la función principal de la siguiente manera.

int main ()
{
    Complex C1 (4, 3);
    int x = 12;
    cout << x;
    cout << C1;
}

Aquí dentro de la función principal, hemos creado un objeto C1 de la clase Complex con valores 4 y 3 para los miembros de datos real e img. A continuación, hemos creado una variable de tipo entero x de valor 12. Luego estamos mostrando el valor de x en la consola. De la misma manera, también queremos imprimir los valores de real e img de C1. Entonces deberíamos escribir cout < .

¿C++ sabe cómo mostrar números complejos? No. ¿Sabe cómo mostrar char, int, float o double? Sí, cualquier tipo de datos incorporados que pueda usar con cout o con cin. Si escribimos cout < entonces esta declaración dará un error de "No hay coincidencia de operador ”. Entonces, ¿qué tal si mostramos nuestros propios objetos?

¿Cómo mostrar nuestros propios Objetos en C++?

Queremos mostrar los valores de C1 con la ayuda de cout. El resultado debería ser '4 + 3i ' en la pantalla. Queremos una salida como '4 + 3i '. C++ no sabe cómo mostrar un número complejo. Entonces, ¿podemos sobrecargar el operador de inserción ‘<<’? Sí , podemos sobrecargar el operador de inserción de flujo en C++.

Ahora escribamos primero una función que sea para mostrar real e img y luego convertiremos esta función en un operador. La siguiente función de visualización muestra el real y el img en la ventana de la consola.

void Display(){
       cout <
}

La función de visualización anterior mostrará un número complejo en el formato de '3 + 4i '. Ahora llamaremos a la función Display desde la función principal de la siguiente manera.

int principal ()
{
     Complejo C1 (4, 3);
     C1.Pantalla();
}

El C1.Display(); declaración mostrará '4 + 3i' en la pantalla. Entonces, de esta manera, mostraremos el número complejo.

Pero no queremos llamar a la función Display. Queremos que C1 se muestre como cout < . Para esto, tenemos que sobrecargar el operador de inserción. Así que construyamos el prototipo.

Primero, en lugar de escribir el nombre de la función Mostrar , tenemos que escribir operador << . Entonces este operador de inserción tomará uno o más parámetros. ¿Cuáles son los parámetros? Tomará un objeto de Complejo así como ostream objeto. Entonces, está tomando dos objetos como parámetros. Entonces, tenemos que pasar dos objetos como parámetros de la siguiente manera.

operador <<(ostream &o, complejo &c)

Si te fijas, hemos pasado objetos por referencia. Luego, después de mostrar los valores, queremos que regrese al cout para que pueda usarse nuevamente en la misma línea. Entonces, en lugar de void, tenemos que escribir ostream& como el tipo de retorno de la siguiente manera.

operador ostream&<<(ostream &o, Complex &c);

Entonces, esta es la firma. Ahora, otro punto importante es que, dado que esta función toma dos parámetros de dos tipos diferentes de objetos, no puede pertenecer a la clase Complex. Entonces, tenemos que hacer de esta función una función amiga. A continuación se muestra la firma de función completa para sobrecargar el operador de inserción en C++.

amigo ostream&operator <<(ostream &o, Complex &c);

Esta es una función amiga y devuelve una referencia de flujo de salida. Como es una función de amigo. No se puede implementar dentro de la clase. Entonces, tenemos que proporcionar la implementación de esta función fuera de la clase de la siguiente manera:

class Complex
{
    private:
        int real;
        int img;
    public:
        Complex (int r = 0, int i = 0)
        {
            real = r;
            img = i;
        }
        friend ostream& operator << (ostream& o, Complex& c);
};

ostream& operator << (ostream & o, Complex & c)
{
    o << c.real << " +i" << c.img;
    return o;
}

Entonces, esta es nuestra clase con el operador de inserción sobrecargado en C++. Ahora escribamos el programa completo para este.

Ejemplo para comprender la sobrecarga del operador de inserción en C++:
#include <iostream>
using namespace std;

class Complex
{
    private:
        int real;
        int img;
    public:
        Complex (int r = 0, int i = 0)
        {
            real = r;
            img = i;
        }
        friend ostream& operator << (ostream& o, Complex& c);
};

ostream& operator << (ostream & o, Complex & c)
{
    o << c.real << " +i" << c.img;
    return o;
}

int main()
{
  Complex C1 (5, 2);
  cout << C1;
}
Salida:

En el próximo artículo, voy a hablar sobre herencia en C++ con ejemplos. Aquí, en este artículo, trato de explicar la sobrecarga del operador de inserción en C++ con ejemplos y espero que disfrute de este artículo Sobrecarga del operador de inserción en C++ con ejemplos. Me gustaría tener sus comentarios. Publique sus comentarios, preguntas o comentarios sobre este artículo.