Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda tonta C++ (vinculacion dinamica)

Iniciado por swapd0, 11 de Marzo de 2011, 11:02:16 PM

« anterior - próximo »

Vicente

Cita de: fjfnaranjo en 16 de Marzo de 2011, 10:46:45 AM
Vale, ahora lo entiendo. Tu hablas de lo que hace el lenguaje cuando se encuentra con el caso de que una variable declarada como *X cuando tiene en su contenido la dirección de un objeto (digamos Y) que esta heredado de X. Aquí el lenguaje hace lo que tiene que hacer para dar soporte a POO, que es buscar el método en Y y luego en X. Esto es fácil, y asumo que de aquí partíamos todos.

Has leido el codigo de Gorkin y mio? :S El compilador tiene que resolver las sobrecargas y sobreescrituras de alguna forma, y si te fijas veras que C# y C++ tienen reglas diferentes para algunos casos (lo cual indica que esto no debe ser algo tan trivial, no creo que los disenadores de ninguno de los dos lenguajes sean poco listos...). Estoy casi seguro que Java es igual que C#, pero estaria de pm si alguien lo pone a ver que pasa.

Cita de: fjfnaranjo en 16 de Marzo de 2011, 10:46:45 AM
Cuando te dije que en C++ no había diferencia entre el método declarado y el contenido no me expliqué bien, porque si se entiende literalmente directamente no habría forma de hacer POO y el lenguaje no estaría orientado a objetos. Lo que yo decía es que el lenguaje no cambia el tipo de la variable porque esta contenga otra cosa (como hacen otros lenguajes, como JS si no me equivoco  ???).

Eso yo diria que se llama tipado estatico vs tipado dinamico.

Volviendo a la POO y al hecho de buscar el método primero en el hijo y luego en el padre...

Cita de: fjfnaranjo en 16 de Marzo de 2011, 10:46:45 AM
Por los ejemplos que publicáis, se ve que lo hace así independientemente de que utilizando la sobrecarga de funciones se "fuerce" (o "aconseje", mejor) al lenguaje de hacer lo contrario (porque vosotros estáis mezclando las dos cosas, la sobrecarga de funciones y la sobreescritura [yo no sabía como llamar a esto en castellano, siempre he usado overload y override, respectivamente]).

Sobrecarga y sobreescritura sip. De todas formas te remito a arriba, dos compiladores, dos resultados diferentes.

Sobre la mezcla, la puse para mostrar que no hay ligadura dinamica sobre los argumentos en C# (y C++), y luego ya de paso ensenar algun caso raruno de las reglas del compilador.

fjfnaranjo

Vale guay.

Si he visto los ejemplos, y los he ejecutado y tal para ver que hacen. Quitando las sobrecargas de funciones no se portan diferente, a no ser que se me haya escapado algo.

Cuando tú dices "ligadura dinámica" es lo mismo que cuando Gorka dice "vinculación dinámica", ¿verdad? Y el término en inglés para ambos y de paso enlace de la Wikipedia es http://en.wikipedia.org/wiki/Dynamic_dispatch, ¿no?

¿Qué te parece lo último que he preguntado? Lo digo por volver al tema original del hilo... me interesa saber si hay algún patrón en particular para el caso (sin las sobrecargas de función).
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.