[C con Clase] C++ Tema Herencia

Joaquin Copello joaquin.lpda20 en hotmail.com
Mie Ago 12 06:23:32 CEST 2015


Con lo que me decis creo que encontre el error pero no sabria como hacerlo. Ahora te explico esto este codigo es parte de un trabajo que tengo que realizar y el objetivo es lograr que haga lo que explique cuando subi el tema, ahora la utilizacion de los codigos ascii de esta manera es porque nos lo pasaron asi para poder imprimir los peces entonces el problema seria que las figuras estan preparadas creo yo para trabajar con enteros, lo que deberia hacer es cambiar los punteros por enteros en vez de que sean chars, esto al menos entiendo yo en la logica y creo te orienta un poco mas a vos asi me podes ayudar.

Date: Tue, 11 Aug 2015 23:27:48 -0400
From: srd4121 en njit.edu
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] C++ Tema Herencia

Hola Joaquín,
Cada "pez" es un array de arrays de 'char' que conceptualmente es una lista de cadenas de caracteres. Por lo tanto, el carácter nulo debe ir al final de cada cadena de caracteres, y no al final de la lista de cadenas. Esto es,
f0 = new char*[6];
for( int i=0; i<6; i++ )  f0[i] = new char[3];  // 2 + el carácter nulo

Y luego tenemos que asignar tal carácter nulo:

f0[0][0]=92;   f0[0][1]=47;   f0[0][2]=0;
f0[1][0]=95;   f0[1][1]=45;   f0[1][2]=0;f0[2][0]=124; f0[2][1]=46;   f0[2][2]=0;...
El otro problema es que asignas caracteres nulos al comienzo en algunas cadenas; por ejemplo, escribes,
f0[4][0]=0;   f0[4][1]=39;

Esto no tiene sentido porque marcas el final de la cadena en el primer carácter y por tanto, los posteriores caracteres no son usados, que en este caso es el código ASCII, 39. Sospecho que quieres dejar un espacio, por lo que haz eso mismo; por ejemplo,
f0[4][0]=' ';   f0[4][1]=39;   f0[4][2]=0;
Además, no veo ninguna razón por usar los códigos ASCII explícitamente, ya que el código no es muy legible de esta manera. Es más fácil usar los caracteres; por ejemplo,
f0[0][0]='\\';   f0[0][1]='/';   f0[0][2]=0;f0[1][0]='_';   f0[1][1]='-';   f0[1][2]=0;f0[2][0]='|';    f0[2][1]='.';   f0[2][2]=0;...
Claro que si sabes exactamente los caracteres que quieres guardar, creo que es más sencillo usar un array regular; por ejemplo,
char f0[6][3] = { "\\/", "_-", "|.", ... };
Así no tienes que andar con memoria dinámica ni asignando caracteres uno a uno.

En cuanto al tema de 'delete[]', debes emparejar cada uso de 'new[]' con un 'delete[]'; es decir, cada petición de memoria debe corresponder con cada liberación de memoria. Para 'f0', pides siete bloques diferentes de memoria; o sea, usas 'new[]' siete veces. A la hora de liberar la memoria debes liberar cada bloque que pediste, y por tanto, debes usar 'delete[]' siete veces. Esto es,
Pez_Chico::~Pez_Chico(){
  for( int i=0; i<6; i++ )  // Liberamos cada array en 'f0[i]'    delete[] f0[i];  delete[] f0;                // Liberamos el array de punteros, 'f0'
  // Lo mismo para 'f1'  ...}

Si quieres listar error por error, puedo contestar cada uno directamente; y si no quieres, no pasa nada, ya listaré cada tema por separado.

Espero que vaya aclarando las dudas.
Steven


_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150812/51158900/attachment.html>


Más información sobre la lista de distribución Cconclase