Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/11/2015, 01:41
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 3 meses
Puntos: 204
Respuesta: Es posible usar gotoxy() en C++?

Cita:
Iniciado por aguml Ver Mensaje
El problema es que en c no existen las clases, los templates, herencia, polimorfismo,...
En esto te voy a corregir un poco.

Si bien es cierto que C no ofrece un mecanismo propio para gestionar herencia y polimorfismo, es perfectamente posible implementar dichos mecanismos en C, lo único que tienes que currarte una función para cada caso. Y bueno, también es cierto que hacer uso de este mecanismo es más delicado que en el caso de C++ porque no tienes ninguna ayuda por parte del compilador.

De hecho se usa algo parecido al polimorfismo cuando, por ejemplo, se trabaja con sockets... si has hecho alguna aplicación con sockets seguro que recuerdas tener que hacer casts a pelo en las estructuras de los sockets para poder acceder a determinados valores.

En cualquier caso, un ejemplo de polimorfismo al más puro estilo C:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef enum
  5. {
  6.   tipoA,
  7.   tipoB
  8. } Tipo;
  9.  
  10. typedef struct
  11. {
  12.   Tipo tipo;
  13.   int valor1;
  14. } A;
  15.  
  16. typedef struct
  17. {
  18.   Tipo tipo;
  19.   int valor1;
  20.   char valor2;
  21. } B;
  22.  
  23.  
  24. A* getNewA( int valor)
  25. {
  26.   A* toReturn = (A*)malloc(sizeof(A));
  27.   toReturn->tipo = tipoA;
  28.   toReturn->valor1=valor;
  29.   return toReturn;
  30. }
  31.  
  32. B* getNewB(int valorInt, char valorChar)
  33. {
  34.   B* toReturn = (B*)malloc(sizeof(B));
  35.   toReturn->tipo = tipoB;
  36.   toReturn->valor1 = valorInt;
  37.   toReturn->valor2 = valorChar;
  38.   return toReturn;
  39. }
  40.  
  41. int main()
  42. {
  43.   A* array[2];
  44.  
  45.   array[0] = getNewA(4);
  46.   array[1] = (A*)getNewB(6,'B');
  47.  
  48.   printf("Los tratamos todos como si fuesen de tipo A:\n");
  49.   int i;
  50.   for( i=0; i<2; i++ )
  51.   {
  52.     A* ptr = array[i];
  53.     printf( "\tElemento %d : tipo=%d, valor1=%d\n", i, ptr->tipo, ptr->valor1 );
  54.   }
  55.  
  56.   printf("Para acceder a valores propios de cada tipo hay que hacer conversiones:\n");
  57.   for( i=0; i<2; i++ )
  58.   {
  59.     A* ptr = array[i];
  60.     switch( ptr->tipo )
  61.     {
  62.        case tipoA:
  63.          printf( "\tElemento de tipo A: valor1=%d\n", ptr->valor1);
  64.          break;
  65.  
  66.        case tipoB:
  67.        {
  68.          B* ptrB = (B*)ptr;
  69.          printf("\tElemento de tipo B: valor1=%d valor2=%c\n", ptrB->valor1, ptrB->valor2);
  70.          break;
  71.        }
  72.     }
  73.   }
  74.  
  75.   for(i=0;i<2;i++) free(array[i]);
  76.  
  77.   return 0;
  78. }

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.