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

Pedro Mateo pedromateoa en gmail.com
Vie Oct 17 04:29:39 CEST 2008


gracias
fue de mucha ayuda


El 16 de octubre de 2008 13:46, Steven Davidson <srd4121 en njit.edu> escribió:

> 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
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20081016/a5659d46/attachment.html>


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