Operador explícito de la conversión de tipos: ()
C++ permite la conversión de tipos explícita utilizando la sintaxis similar a la sintaxis de la llamada de función.
simple-type-name ( expression-list )
Comentarios
Un simple-tipo-nombre seguido de una expresión-lista incluyan entre paréntesis construye un objeto del tipo especificado mediante expresiones especificadas.El ejemplo siguiente se muestra una conversión de tipos explícita para escribir int:
int i = int( d );
El ejemplo siguiente se usa una versión modificada de la clase de Point definido en resultados de la llamada de función.
Ejemplo
// expre_Explicit_Type_Conversion_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class Point
{
public:
// Define default constructor.
Point() { _x = _y = 0; }
// Define another constructor.
Point( int X, int Y ) { _x = X; _y = Y; }
// Define "accessor" functions as
// reference types.
unsigned& x() { return _x; }
unsigned& y() { return _y; }
void Show() { cout << "x = " << _x << ", "
<< "y = " << _y << "\n"; }
private:
unsigned _x;
unsigned _y;
};
int main()
{
Point Point1, Point2;
// Assign Point1 the explicit conversion
// of ( 10, 10 ).
Point1 = Point( 10, 10 );
// Use x() as an l-value by assigning an explicit
// conversion of 20 to type unsigned.
Point1.x() = unsigned( 20 );
Point1.Show();
// Assign Point2 the default Point object.
Point2 = Point();
Point2.Show();
}
Output
x = 20, y = 10
x = 0, y = 0
Aunque en el ejemplo anterior muestra la conversión de tipos explícita mediante constantes, la misma técnica funcionará para realizar estas conversiones en objetos.El fragmento de código siguiente muestra cómo hacerlo:
int i = 7;
float d;
d = float( i );
Las conversiones de tipos explícitas también se pueden especificar utilizando la sintaxis de “conversión”.El ejemplo anterior, reescrito mediante la sintaxis de conversión, es:
d = (float)i;
Las conversiones de conversión y de estilo de función tienen los mismos resultados al convertir de valores.Sin embargo, en la sintaxis de estilo de función, puede especificar más de un argumento para la conversión.esta diferencia es importante para los tipos definidos por el usuario.considere una clase de Point y sus conversiones:
struct Point
{
Point( short x, short y ) { _x = x; _y = y; }
...
short _x, _y;
};
...
Point pt = Point( 3, 10 );
El ejemplo anterior, que utiliza la conversión de estilo de función, se muestra cómo convertir dos valores (uno para x y uno para *y)*al tipo definido por el usuario Point.
Precaución |
---|
Utilice las conversiones de tipos explícitas con cuidado, ya que reemplazan la comprobación de tipo integrada del compilador de C++. |
La notación de conversión se debe utilizar para las conversiones a tipos que no tienen un simple-tipo-nombre (puntero o tipos de referencia, por ejemplo).La conversión a tipos que pueden expresarse con un simple-tipo-nombre se pueden escribir en cualquier formulario.Vea Especificadores de tipo para obtener más información sobre lo que constituye un simple-tipo-nombre.
La definición de tipo de conversiones no es válida.