¿Qué es el constructor de conversión en C++?

Requisito previo: conversión de tipo en C++ y uso de palabra clave explícita en C++ 

En C++, si una clase tiene un constructor al que se puede llamar con un solo argumento, este constructor se convierte en un constructor de conversión porque dicho constructor permite la conversión automática a la clase que se está construyendo. 

Ejemplo  

C++

#include <iostream>
 
class MyClass {
    int a, b;
 
public:
    MyClass(int i)
    {
        a = i;
        b = i;
    }
    void display()
    {
        std::cout << " a = " << a << " b = " << b << "\n";
    }
};
 
int main()
{
    MyClass object(10);
    object.display();
 
    // Single parameter conversion constructor is invoked.
    object = 20;
    object.display();
    return 0;
}

Producción: 

a = 10 b = 10
a = 20 b = 20

Constructores de conversión: hay constructores que convierten tipos de su parámetro en un tipo de la clase. El compilador usa estos constructores para realizar conversiones implícitas de tipo de clase. Estas conversiones se realizan invocando al constructor correspondiente que coincide con la lista de valores/objetos que se asignan al objeto.

Este ejemplo anterior solo trata con un parámetro, para extenderlo a varios parámetros, es decir, listas de inicializadores extendidas o listas de inicialización entre llaves. Es decir, encerramos los parámetros que se le pasarán dentro de un par de llaves ({}).

Ejemplo con múltiples parámetros: 

C++

#include <iostream>
 
class MyClass {
    int a, b;
 
public:
    MyClass(int i, int y)
    {
        a = i;
        b = y;
    }
    void display()
    {
        std::cout << " a = " << a << " b = " << b << "\n";
    }
};
 
int main()
{
    MyClass object(10, 20);
    object.display();
 
    // Multiple parameterized conversion constructor is invoked.
    object = { 30, 40 };
    object.display();
    return 0;
}

Producción: 

a = 10 b = 20
a = 30 b = 40

Nota:  

  1. Las listas de inicializadores extendidas están disponibles en C++ 11 y en adelante.
  2. Podemos intentar asignar directamente una lista de inicializadores extendida a un objeto cuando se está creando.
  3. Una función de conversión de tipo de clase implícita de un constructor no afecta su comportamiento normal.
  4. El uso del especificador de función explícito para un constructor elimina las conversiones implícitas que usan ese constructor

Uso del constructor de conversión  

1. En valor de retorno de una función: 

Cuando el tipo de retorno de una función es una clase, en lugar de devolver un objeto, podemos devolver una lista de inicialización entre llaves , ahora que el tipo de retorno es una instancia de clase, un objeto de esa clase se crea con el inicio entre llaves. list , dado que la clase tiene un constructor de conversión correspondiente.

Ejemplo:  

MyClass create_object(int x, int y) 

return {x, y}; 
}

Esta función create_object devolverá un objeto MyClass con valores a y b como x e y pasados ​​a la función. 

2. Como parámetro de una función: 
cuando el tipo de parámetro de una función es de una clase, en lugar de pasar un objeto a la función, podemos pasar una lista de inicio entre llaves a la función como parámetro real, dado que la clase tiene un constructor de conversión correspondiente. 

Un ejemplo :  

void display_object(MyClass obj) 

obj.display(); 
}
// Esta función se invoca en la función principal con una lista de inicio entre llaves con dos enteros como parámetro. 
// por ejemplo: 
// mostrar_objeto({10, 20}); 
 

Nota: Esta función display_object crea una nueva instancia de clase de MyClass llamada obj y llamará a su función miembro display().

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

Categories C++

Deja una respuesta

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