Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La sobrecarga de operadores ha cambiado significativamente de Extensiones administradas para C++ a Visual C++.
En la declaración de un tipo de referencia, por ejemplo, en lugar de utilizar la sintaxis operator+ nativa, debe escribir explícitamente el nombre interno subyacente del operador; en este caso, op_Addition.Además, la invocación de un operador debe realizarse de forma explícita mediante ese nombre, lo que elimina las dos ventajas principales de la sobrecarga de operadores: (a) la sintaxis intuitiva y (b) la posibilidad de combinar nuevos tipos con tipos existentes.Por ejemplo:
public __gc __sealed class Vector {
public:
Vector( double x, double y, double z );
static bool op_Equality( const Vector*, const Vector* );
static Vector* op_Division( const Vector*, double );
static Vector* op_Addition( const Vector*, const Vector* );
static Vector* op_Subtraction( const Vector*, const Vector* );
};
int main()
{
Vector *pa = new Vector( 0.231, 2.4745, 0.023 );
Vector *pb = new Vector( 1.475, 4.8916, -1.23 );
Vector *pc1 = Vector::op_Addition( pa, pb );
Vector *pc2 = Vector::op_Subtraction( pa, pc1 );
Vector *pc3 = Vector::op_Division( pc1, pc2->x );
if ( Vector::op_Equality( pc1, pc2 ))
;
}
En la nueva sintaxis, se recuperan las expectativas usuales de un programador de C++ nativo, tanto en la declaración como en el uso de operadores estáticos.Ésta es la clase Vector traducida a la nueva sintaxis:
public ref class Vector sealed {
public:
Vector( double x, double y, double z );
static bool operator ==( const Vector^, const Vector^ );
static Vector^ operator /( const Vector^, double );
static Vector^ operator +( const Vector^, const Vector^ );
static Vector^ operator -( const Vector^, const Vector^ );
};
int main()
{
Vector^ pa = gcnew Vector( 0.231, 2.4745, 0.023 );
Vector^ pb = gcnew Vector( 1.475,4.8916,-1.23 );
Vector^ pc1 = pa + pb;
Vector^ pc2 = pa - pc1;
Vector^ pc3 = pc1 / pc2->x;
if ( pc1 == pc2 )
;
}