Anuncios Google

C++ Programando con Clases

Pues me cuesta un poco esto de programar usando clases y objetos. Os subo esta práctica de clases para que la critiquéis y pueda aprender más. No he usado herencia, ni clases virtuales ni poliformismo. Pero he intentado tocar el resto de palos, miembros constantes, volátiles y estáticos, funciones miembro normales, estáticas y en línea. También toco el uso de vectores.

Descarga.

 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pspgorrister

Buff muy largo de explicar

Buff muy largo de explicar pipagerardo, he visto tu source un poco por encima, de momento te comento algunos puntos, aunque tendría que profundizar más el mismo:

  • La declaración de la clase debe ir separada de la implementación, el principal motivo, es que si alguien quiere usar esa clase tiene que hacer referencia al header (#include "miclase.h"). Hay otros más pero ese es el principal, así que ya sabes: declaración y funciones inline en un .h, el resto de código en un .cpp. Siempre un .h y un .cpp por cada clase.
  • En los .h NUNCA uses "using namespace", ya que puede producir conflictos con el namespace que use el .cpp que incluya el .h de dicha clase. los .h no tienen using namespace, y si lo tienen, mal hecho.
  • No tiene sentido en el destructor de alumno, restar 1 el número de alumnos. Realmente, para hacerlo bien, tendrías que tener otra clase por elemplo "ListaAlumnos" o la que tu has creado como "clase" y quitar el alumno a través de esa clase, la finalidad del destructor de un objeto es destruir el objeto en sí mismo, no "restar un objeto alumno", espero que me entiendas que quiero decir.
  • Esto nos lleva a que los métodos y miembros estáticos, no son necesario, los gestionaría la ListaAlumnos o la "clase".
  • El destructor nunca hay que llamarlo directamente. Se destruirá cuando salgas de la función que lo contiene (si es main, cuando acabe el programa), si quieres destruir objetos, debe usar punteros y crearlos con new y borrarlos con delete.
  • Luego has usado "delete[] alumnos", eso está quitando la encapsulación, no se está usando POO, una forma sería "clase.Borrar()" (creo que más tarde lo has hecho así). Mezclas un alumno con una lista de alumnos en la misma clase.
  • He visto que has cleado una clase "clase" (lol), la gestión de los alumnos debería hacerse a través de la clase, clase->alumno(2)->poner_nota(8).
  • En vez de "segundo.poner_nombre( 0, "Pepe" )", usa segundo->alumno(0)->poner_nombre("pepe"). ¿Ves la diferencia?, usamos el método poner nota directamente en el alumno. Esto te ahorra mucho código, tan sólo que el método "alumno()", devuelva un alumno y luego se usen directamente los métodos en el objeto alumno, no hace falta que vuelvas a crearte los mísmos métodos "poner_nombre", "poner_nota", "ver_notas", etc. en la class "clase", ya que es trabajo de chinos, y no es POO.

Bueno, hay más cosas, pero creo que con eso y sin profundizar, ya te doy mi opinión. Un saludo y ánimo.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de pipagerardo

Tomo nota.

Gracias por tu comentario muy completo, pero si no es programando no se aprende a usar POO y la verdad es que cuesta de entender.

Ahora me voy de vacaciones 15 días, pero cuando vuelva no pienso parar hasta conseguir dominar la POO.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.