[C con Clase] operador global de modelado (conversion de tipos)

Steven Davidson srd4121 en njit.edu
Jue Oct 16 19:46:58 CEST 2008


Hola Pedro,

Pedro Mateo wrote:
>  
> tengo esta funcion
> void funcionX(Clase* b){
> }
>  
> pero quiero llamarta de esta manera
>  
> functionX(123) 
> para que tal operacion pueda ser compilada tengo creo que seria 
> necesaria sobrecargar un operador global de modelado (o conversion)
> que el compilador pueda utilizar para resolver la conversion de un
> int a un Clase*
>  
> es posible?
> como lo se haria?
>  

No es posible crear una conversión de esta manera. Las conversiones 
personalizadas sólo se pueden hacer dentro de una clase. Por ejemplo,

class A
{
private:
   int num;

public:
   ...
   operator int()  { return 5+num; }
};

Ahora podemos convertir de un objeto 'A' a un entero. Por ejemplo,

void func( int n )
{
   cout << n;
}

int main()
{
   A obj(10);

   func( obj );
   cout << endl;
   ...
}


En tu caso, quieres convertir de 'int' a 'Clase *'. Obviamente, no 
existe tal conversión en la gramática de C++. Sinceramente, no estoy 
seguro de cómo sería la conversión que quieres implementar, pero sugiero 
sobrecargar la función 'funcionX()'. Por ejemplo,

void funcionX( Clase* b );
void funcionX( int n );


Supongo que podrías crear otra clase intermediaria donde implementar la 
conversión. Por ejemplo,

class Clase { ... };

class Temp
{
public:
   int num;
   Temp( int n ) : num(n)  {}

   // Haz la conversión de 'int' a 'Clase *'
   operator Clase *()  { ... }
};

Y luego al usar esta clase, haríamos esto:

funcionX( Temp(123) );

Los pasos que hacemos son:
1. Instanciar un objeto temporal de 'Temp': Convertir de 'int' a 'Temp'.
2. Convertir de 'Temp' a 'Clase *'
3. Invocar 'funcionX()' con un 'Clase *' como argumento.


Espero que esto te ayude.

Steven





Más información sobre la lista de distribución Cconclase