Operador de conversão explícita do tipo: ()
C++ permite a conversão de tipo explícito usando uma sintaxe semelhante à sintaxe de chamada de função.
simple-type-name ( expression-list )
A nome de tipo simples seguido de um lista de expressão colocados em construções de parênteses, um objeto do tipo especificado usando as expressões especificadas.O exemplo a seguir mostra uma conversão de tipo explícito para tipo int:
int i = int( d );
O exemplo a seguir usa uma versão modificada da Point classe definida no Resultados da chamada de função.
// 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();
}
x = 20, y = 10
x = 0, y = 0
Embora o exemplo anterior demonstra usando constantes de conversão de tipo explícito, a mesma técnica funciona para executar essas conversões em objetos.O fragmento de código a seguir demonstra isso:
int i = 7;
float d;
d = float( i );
Conversões de tipo explícito também podem ser especificadas usando a sintaxe "cast".O exemplo anterior, reescrito usando a sintaxe do elenco, é:
d = (float)i;
Conversões cast e o estilo de função têm os mesmos resultados ao converter de valores únicos.No entanto, na sintaxe de estilo de função, você pode especificar mais de um argumento para conversão.Essa diferença é importante para tipos definidos pelo usuário.Considere um Point classe e suas conversões:
struct Point
{
Point( short x, short y ) { _x = x; _y = y; }
...
short _x, _y;
};
...
Point pt = Point( 3, 10 );
O exemplo anterior, que usa a conversão do estilo de função, mostra como converter dois valores (uma para x e outro para y) para o tipo definido pelo usuário Point.
Cuidado |
---|
Use as conversões de tipo explícito com cuidado, pois elas substituirão a tipo interno do compilador C++ verificação. |
O cast notação deve ser usada para conversões de tipos que não possuem um nome de tipo simples (ponteiro ou uma referência tipos, por exemplo).Conversão de tipos que pode ser expresso com um nome de tipo simples podem ser escritos em qualquer formulário.Consulte Especificadores de tipo para obter mais informações sobre o que constitui uma nome de tipo simples.
Definição de tipo dentro de conversões é ilegal.