elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación C/C++ / Se ejecuta el método virtual de la clase base y no la heradada en: 22 Octubre 2014, 02:10 am
SOLUCIONADO. fui muy boludo y en el main no usaba la clase heredada JAJAJAJ. el cafe no basto para esa noche
Hola, como andan ? espero que bien :p

Verán, después de mucho regreso con C/C++ extrañando sus punteros jaja
Tengo este problema que ya me quemo las pestañas y no veo lo que esta mal.

Tengo mi clase base Escenario.h con su método virtual isEndEscena el cual luego reescribo en su clase derivada HelloEscena y por ultimo, almaceno HelloEscena en un vector de vector<CEscenario*> de la clase Cordinador

El problema esta, en que cuando, tengo llamar a isEndEscena, me llama a la de la clase base y no su deribada.

Dejo el código:

Escenario
Código
  1. //head
  2. #pragma once
  3.  
  4. #include <SFML\Graphics.hpp>
  5. #include "Sprite.h"
  6.  
  7. class CEscenario
  8. {
  9. public:
  10. void addSprite(CSprite*);
  11. void clearSprites();
  12. void deleteSprite(const char* key);
  13.  
  14. virtual bool isEndEscena(sf::Event);
  15.  
  16. void updateSprites(sf::Event);
  17. void drawSprites();
  18.  
  19. char* getKey();
  20. private:
  21. std::vector<CSprite*> sprites;
  22. char* key;
  23. };
  24.  
  25. //cpp
  26.  
  27. #include "Escenario.h"
  28.  
  29. bool CEscenario::isEndEscena(sf::Event)
  30. {
  31. return true;
  32. }
  33.  
  34. char* CEscenario::getKey()
  35. {
  36. return this->key;
  37. }
  38.  
  39. void CEscenario::updateSprites(sf::Event evento)
  40. {
  41. int i = 0;
  42. for (int i = 0; i < int(this->sprites.size()); i++)
  43. {
  44. this->sprites[i]->update(evento);
  45. }
  46. }
  47.  
  48. void CEscenario::addSprite(CSprite* newSprite)
  49. {
  50. this->sprites.push_back(newSprite);
  51. }
  52.  
  53. void CEscenario::deleteSprite(const char* key)
  54. {
  55. int i = 0;
  56. for (int i = 0; i < int(this->sprites.size()); i++)
  57. {
  58. if (std::strcmp(this->sprites[i]->getKey(), key) == 0)
  59. {
  60. this->sprites.erase(this->sprites.begin() + i);
  61. return;
  62. }
  63. }
  64. }
  65.  
  66. void CEscenario::clearSprites()
  67. {
  68. this->sprites.clear();
  69. }
  70.  
  71. void CEscenario::drawSprites()
  72. {
  73. int i = 0;
  74. for (int i = 0; i < int(this->sprites.size()); i++)
  75. {
  76. this->sprites[i]->draw();
  77. }
  78. }
  79.  

HelloEscena
Código
  1. //head
  2. #pragma once
  3.  
  4. #include <SFML\Graphics.hpp>
  5. #include "Escenario.h"
  6.  
  7. class CHelloEscena : CEscenario
  8. {
  9. public:
  10. bool isEndEscena(sf::Event);
  11. };
  12.  
  13.  
  14. //cpp
  15. #include "HelloEscena.h"
  16.  
  17. bool CHelloEscena::isEndEscena(sf::Event evento)
  18. {
  19. int a = 0;
  20. return false;
  21. }
  22.  

Cordinador
Código
  1.  
  2. //head
  3. #pragma once
  4.  
  5. #include <vector>
  6. #include "Escenario.h"
  7.  
  8. class CCordinador
  9. {
  10. public:
  11. void addEscenario(CEscenario*);
  12. void clearEscenarios();
  13. void deleteEscenario(const char *key);
  14.  
  15. CEscenario* getEscenario();
  16.  
  17. //void nextEscenario();
  18. void(*nextEscenario)();
  19. private:
  20. std::vector<CEscenario* > escenarios;
  21. CEscenario *escenarioActual;
  22. };
  23.  
  24. //cpp
  25. #include <cstring>
  26.  
  27. #include "Cordinador.h"
  28.  
  29. CEscenario* CCordinador::getEscenario()
  30. {
  31. return escenarioActual;
  32. }
  33.  
  34. void CCordinador::addEscenario(CEscenario* newEscenario)
  35. {
  36. this->escenarios.push_back(newEscenario);
  37. this->escenarioActual = newEscenario;
  38. }
  39.  
  40. void CCordinador::deleteEscenario(const char* key)
  41. {
  42. int i = 0;
  43. for (int i = 0; i < int(this->escenarios.size()); i++)
  44. {
  45. if (std::strcmp(this->escenarios[i]->getKey(), key) == 0)
  46. {
  47. this->escenarios.erase(this->escenarios.begin() + i);
  48. return;
  49. }
  50. }
  51. }
  52.  
  53. void CCordinador::clearEscenarios()
  54. {
  55. this->escenarios.clear();
  56. }
  57.  

Donde uso Cordinador....
Código
  1. //head
  2. #pragma once
  3.  
  4. #include "Cordinador.h"
  5.  
  6. class CApp
  7. {
  8. public:
  9. CApp(sf::RenderWindow *widows);
  10.  
  11. /*Parte del siclo de vida del juego*/
  12. void loopGame();
  13. void catchEvent();
  14. void clearScreen();
  15.  
  16. void update(sf::Event);
  17. void draw();
  18. void displayWindows();
  19.  
  20.  
  21. /*Armado del juego*/
  22. static sf::RenderWindow *window;
  23. void setCordinador(CCordinador *c) { this->cordinador = c; }
  24. private:
  25. CCordinador *cordinador;
  26. };
  27.  
  28. //cpp
  29. //solo puse donde lo uso por que es mucho si no xD
  30. void CApp::update(sf::Event evento)
  31. {
  32. if (evento.type == sf::Event::Closed)
  33. {
  34. this->window->close();
  35. return;
  36. }
  37.  
  38. if (this->cordinador->getEscenario()->isEndEscena(evento))
  39. {
  40. //regresa siempre true de la clase base, y no false de la clase derivada
  41.  
  42. //Un momento del juego termino y pasa al siguiente
  43. //ej: menues, niveles, etc
  44. this->cordinador->nextEscenario();
  45. }
  46.  
  47. this->cordinador->getEscenario()->updateSprites(evento);
  48. }
  49.  

y el main infaltable :p
Código
  1. #include <SFML/Graphics.hpp>
  2.  
  3. #include "App.h"
  4.  
  5. #include "HelloSprite.h"
  6. #include "HelloEscena.h"
  7.  
  8. int main()
  9. {
  10. // Create the main window
  11. sf::RenderWindow win(sf::VideoMode(800, 600, 32), "Hello World - SFML");
  12.  
  13. //Definimos los sprites:
  14. CHello sprite;
  15.  
  16. //Definimos los escenario:
  17. //imprimira en pantalla en orden de pila de como se le fue agregando al escenario
  18. CEscenario test;
  19. test.addSprite(&sprite);
  20.  
  21. //Cargamos los Escenarios al Cordinador
  22. CCordinador cordinador;
  23. cordinador.addEscenario(&test);
  24.  
  25. //Le damos al App el cordinador
  26. CApp app(&win);
  27. app.setCordinador(&cordinador);
  28.  
  29. //Empezamos el juego
  30. app.loopGame();
  31.  
  32. return 0;
  33. }
  34.  

Desde ya muchas gracias por leer.
2  Programación / Programación C/C++ / Re: Matriz en C++ en: 10 Septiembre 2012, 22:26 pm
te puedo ayudar con la lógica, y resolución de código ya echo, pero no esperes que te lo de servido ya para copiar y pegar, no se hacen tareas...
vos te referís que si tengo la matriz:
Código:

  1  2  3
  4  5  6
  7  8  9


el programa calcule el factorial de 1, 5 y 9 ?
si es eso, fíjate que todos esos elementos tienen en común que están ubicados en la posición de manera tal que su posición en fila/columna es igual, por ejemplo, el elemento 1 esta en Matriz [1] [1] , el elemento 5 en Matriz [2] [2] y elemento 9 en matriz [3] [3]

3  Programación / Programación C/C++ / Re: [Resuelto] Evitar avisos Code::Block en: 10 Septiembre 2012, 21:38 pm
eso tiene facil solucion:

Código
  1. FILE *f=NULL;

un saludo!

casi pero no, el FILE *f es local a la función conflictiva, en todo caso deberia ser =NULL el puntero a que manda al compo bufer de la función, no se molesten mas en seguir contestando, se lo agradezco de verdad la ayuda que dan, pero no les quiero sacar mas el tiempo en algo que ya solucione :$

el viernes les subo el soft completo que no es mas que uno para practicar menues, malloc, estructuras y ABM de un archivo, para que de esa manera si alguien en algún futuro busca códigos de ejemplo de eso lo encuentre :P
4  Programación / Programación C/C++ / Re: QUE ALGuiEN me eXPLIQUE x!! en: 10 Septiembre 2012, 21:21 pm
si yo si agradezco buena s páginas pero AUN no me habéis dado NI UN source para
buscar archivos y nada de librerías que sea puro c , c++ o asm.

queres un source ? date MAÑA , yo soy un simple y bobo novato que solo conoce c++ y ASM (ASM bastante bien)  que hace preguntas estúpidas ,y aun así me puedo arreglar para darme maña y mostrarte ,con un básico de ABM que conozco, unas lineas de código que buscan archivos en tu pc,

Código
  1.  
  2. void buscar_archivo(const char* ruta);
  3.  
  4. int main ()
  5. {
  6.   char a [250];
  7.   cout<<"Indicar ruta y Archivo Deseado"<<endl;
  8.   cin.getline(a,250);
  9.   buscar_archivo(a);  
  10.  
  11.   return 0;
  12. }
  13.  
  14. void buscar_archivo(const char* ruta)
  15. {
  16.  FILE *f;
  17.  f=fopen(ruta,"rb");
  18.  if(f==NULL)
  19.  {
  20.       cout<<"Archivo inexistente"<<endl;
  21.   }
  22.  else  cout<<"archivo encontrado";
  23. }
  24. fclose(f);
  25.  

y eso se puede mejorar millones de veces mas dándote MAÑA y usando cosas a tu dispocision como llamadas al system(); para que te de una mano con sus comandos de la consola del SO.
segundo, yo estudio en la UTN FRGP de Arg. y no te enseñan esas cosas, te enseñan lo básico de lenguajes para que puedas agarrar un libro de un lenguaje en especial y entenderlo con noción. y como dijo pepe (alla él el que lo conozca) hay dos formas de lograr ser programador, conociendo lenguaje, o sabiendo lenguaje...

y por ultimo y como reflexión personal, acordare que del otro lado de tu lindo monitor hay personas, y si a las personas se las trata bien, te responden bien, tal vez no allá sido tu intención pero tus comentarios sonaron muy prepotentes y despectivos hacia los demás...
5  Programación / Programación C/C++ / Re: [ayuda] Evitar avisos Code::Block en: 10 Septiembre 2012, 18:13 pm
supongo que declarara la variable en el main y en esta funcion ya lo hace todo, la inicializa con malloc y luego la carga de datos, para devolver el puntero con todo ya hecho.

un saludo!

exacto ! , por eso decía que la función era lo de menos, por que no quería que se rompan el coco entendiéndola ajaj
el aviso lo genera por que recibe una variable puntero con basura y al detectar que realizan operaciones sobre ella salta el warning, pero como me es indistinto por que la sobre escribe usando malloc, ese aviso esta de mas y era molesto jaaj
6  Programación / Programación C/C++ / Re: [ayuda] Evitar avisos Code::Block en: 9 Septiembre 2012, 03:23 am
gracias, era eso :D, lo de la función es lo de menos ,el aviso era por que mandaba un parámetro sin inicializar , pero no hacia falta por que lo sobrescribía mas tarde con malloc... muchas gracias :D

solo si alguien le sirve en algún futuro... le paso la función, crea un vector que contiene toda la información de un archivo usando malloc, solo le indicas la ruta del archivo, un puntero a la estructura a usar, y el tamaño de la estruc (sizeof)

Código
  1.  
  2. void* Carga_enMalloc(const char* ruta, void* registro, size_t tam)
  3. {
  4.    int cant;
  5.    FILE *f;
  6.    f=fopen(ruta,"rb");
  7.    error_archivo("\t ERROR: no se pudo abrir el archivo - T x 69", &f);
  8.  
  9.    cant=Cant_registros(ruta, tam);
  10.  
  11.    registro = malloc(cant*tam);
  12.  
  13.    fread(registro, tam, cant, f);
  14.  
  15.    fclose(f);
  16.  
  17.    return registro;
  18. }
  19.  

lo del aviso, se por que se genera, y que el return de la funcion esta de mas, pero cuando ya tenia el programa avansado al notarlo, no tuve ganas de cambiarlo (soy vago -_-)
7  Programación / Programación C/C++ / Re: [Duda] Aprender C++ o no en: 9 Septiembre 2012, 01:25 am
si, por que te ayudara mas a comprender los programas basados en objetos, si vas a aprender c++ , y ya sabes c, tirate de lleno con las clases, strucs y sobrecargas.
8  Programación / Programación C/C++ / [Resuelto] Evitar avisos Code::Block en: 9 Septiembre 2012, 01:20 am
hola como andan? espero que bien, yo de nuevo por acá jeje, tengo una duda con la instancia de compilación que realiza el IDE Code::Block... es posible evitar que me marque algunos avisos ? por que tengo una función que uso mucho pero por no ser muy linda a la vista del Sr.GCC siempre me tira avisos sobre la misma :P y... ya es molesto >.<

si alguien conoce un método para evitar esos avisos le agradeceré mucho :D

desde ya muchas gracias. y buena suerte.
9  Programación / Programación C/C++ / Re: matrices en: 8 Septiembre 2012, 05:12 am
con zig zag se refiere a que lee en diagonal, de una manera mejor escrita (si pretendes que hagamos la tarea al menos explicarla bien)
Código:

  1  3  4    si unimos con una linea imaginaria del 1 al 9
  2  5  8    veremos el zigzag...
  6  7  9


y la idea de que tengas ese tipo de ejercicio es para que te rompas la cabeza pensando, usando lógica, para que te abstraigas del código y pienses como programador, no en que código usar.
10  Programación / Programación C/C++ / Re: Guardar archivos en: 6 Septiembre 2012, 22:47 pm
lo mas sencillo para empezar en c/c++ con sistema de archivos es:
fopen, fclose, fread, fwrite, fseek y fteel.


Código
  1. #include <cstdio>
  2.  
  3. FILE *p //siempre es un puntero FILE
  4.  
  5. //p = fopen (ruta,modo)
  6. /* la ruta del archivo, ej mis documentos/archivo.dat
  7. el modo, es el metodo con el que lo abres, si para leer ("rb"), agregar ("ab"), escribir("wb")*/
  8.  
  9. p= fopen (archivo.dat, "wb" ) //creas archivo.dat en la misma carpeta que el .exe y en p es ahora como si fuera "el archivo.dat"
  10.  
  11.  
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines