Operadores de conversión en C++

En C++, el programador abstrae objetos del mundo real usando clases como tipos concretos. A veces, se requiere convertir un tipo concreto a otro tipo concreto o tipo primitivo implícitamente. Los operadores de conversión juegan un papel importante en tales situaciones. Es similar a la función de sobrecarga del operador en clase.
Por ejemplo, considere la siguiente clase, aquí estamos creando una clase para números complejos. Tiene dos miembros de datos: real e imaginario. 

C++

// CPP Program to demonstrate Conversion Operators
#include <cmath>
#include <iostream>
using namespace std;
 
class Complex {
private:
    double real;
    double imag;
 
public:
    // Default constructor
    Complex(double r = 0.0, double i = 0.0)
        : real(r)
        , imag(i)
    {
    }
 
    // magnitude : usual function style
    double mag() { return getMag(); }
 
    // magnitude : conversion operator
    operator double() { return getMag(); }
 
private:
    // class helper to get magnitude
    double getMag()
    {
        return sqrt(real * real + imag * imag);
    }
};
 
int main()
{
    // a Complex object
    Complex com(3.0, 4.0);
 
    // print magnitude
    cout << com.mag() << endl;
    // same can be done like this
    cout << com << endl;
}
Producción

5
5

Estamos imprimiendo la magnitud de los objetos complejos de dos maneras diferentes.
Tenga en cuenta que el compilador tendrá más control al llamar a una función adecuada según el tipo, en lugar de lo que espera el programador. Será una buena práctica usar otras técnicas como la función miembro específica de clase/objeto (o hacer uso de la clase Variant de C++) para realizar dichas conversiones. En algunos lugares, por ejemplo al hacer llamadas compatibles con la biblioteca C existente, estos son inevitables.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *