es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué se está llamando al constructor aquí?

Tengo una pregunta sobre el siguiente código. ¿Qué sucederá cuando se ejecute la línea: obj = 20; en la función principal? No puedo entender por qué llama al constructor. ¿Podrían explicarlo por favor?

“`cpp
#include <iostream>
#include <string>
using namespace std;
class Int {
int x;

public:
Int(int x_in = 0)
: x{ x_in }
{
cout << "Constructor de conversión llamado" << endl;
}
operator string()
{
cout << "Operador de conversión" << endl;
return to_string(x);
}
};
int main()
{
Int obj(3);
string str = obj;
obj = 20;
string str2 = static_cast<string>(obj);
obj = static_cast<int>(30);
return 0;
}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Cuando se ejecuta la línea obj = 20; en main(), se desencadena una conversión de tipo.

    Dado que 20 es un número entero y obj es un objeto de la clase Int, se llama al constructor Int(int x_in = 0) para convertir el entero en un objeto de la clase Int.

    Esto se debe a la forma en que se define el constructor con un único parámetro entero y un valor predeterminado de 0. Esto permite una conversión implícita de enteros a objetos de la clase Int.

    Se imprime la salida “Conversion Ctor called”, lo que indica que el constructor es en efecto llamado.

    Después de la conversión, el valor de obj será 20 como objeto de la clase Int.

Comments are closed.