Ver Mensaje Individual
  #6 (permalink)  
Antiguo 16/07/2013, 23:22
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Programación Orientada en Objetos de C++

Primero que nada una disculpa por no explicar los cambios que hice, pensé que así como pusiste el código sin mas explicación también podrías entender los cambios sin mucha explicación.

Cita:
Iniciado por ambigus Ver Mensaje
1. ¿Porqué quitar le "nodo *apun" a void reco_iter(nodo*apun) y quitar definitivamente "void borrar_lista(nodo *inicial);"?


Código C++:
Ver original
  1. void reco_iter(nodo *apun); // Cambio
  2.     void borrar_lista(nodo *inicial) ;

De esto

Código C++:
Ver original
  1. void lista::reco_iter(nodo *apun) // Cambio
  2. {
  3.     while(apun != NULL)
  4.     {
  5.         imprime_nodo(apun); // Imprime valor nodo
  6.         apun = apun->sig;
  7.     }
Pasas a esto:

Código C++:
Ver original
  1. void lista::reco_iter() // Cambio
  2.     {
  3.         nodo *apun = inicial;
  4.         while(apun != NULL)
  5.         {
  6.             imprime_nodo(apun); // Imprime valor nodo
  7.             apun = apun->sig;
  8.         }
  9.     }
Veo que no comprendes aun bien el concepto de encapsulamiento. Dime, ¿Por que debo de pasarle y yo por mi parte mantener siempre el primer nodo de la lista, que no eso debería de ser transparente?

Cita:
Iniciado por ambigus Ver Mensaje
2. ¿Porqué metes dentro el "nodo *apun = inicial;"?
3. ¿Porqué este cambio?

De esto:
Código C++:
Ver original
  1. nodo *apun; // " * " es para crear nodo
  2.     apun=inicial;

A esto:
Código C++:
Ver original
  1. nodo *apun = inicial; // " * " es para crear nodo
Bueno la pregunta 2 y 3 es la misma pregunta. Ahora realmente me pregunto si tu escribiste este código. Es básico, una de las primeras cosas que vez cuando aprendes C o C++ que int x = 1; es igual que si tuvieras. int x; x = 1; simplemente es como una abreviación.

Cita:
Iniciado por ambigus Ver Mensaje
4. ¿Porqué de "void main()" pasas a "int main()"?
Como te dije antes, es porque no estas acostumbrado a los estándares, pero un estándar de C++ es que regresen un entero. 0 en caso que todo salio bien y cualquier otro valor si algo salio mal. De hecho no te debería de compilar con void main() con cualquier compilador de C++ minimamente decente.

Cita:
Iniciado por ambigus Ver Mensaje
5. ¿Porqué de esto

Código C++:
Ver original
  1. apun = objlista.inicial;
  2.     objlista.reco_iter(apun);
  3.     objlista.borrar_lista(objlista.inicial)

Pasas a esto:

Código C++:
Ver original
  1. objlista.reco_iter();
  2.         objlista.~lista();
  3.         return 0;
No tenias implementado borrar_lista solo tenias implementado el destructor. Así que mejor cambie la llamada de borrar_lista al destructor. Y el de reco_iter siempre obtenias objlista.inicial y luego se lo pasabas de parámetro al método entonces dije porque mejor no simplemente lo tomas internamente en la clase y ya.

Otra cosa trata de separar con una linea en blanco tus métodos porque todos juntos no se venia donde terminaba uno y donde empezaba otro.