<div dir="ltr">Hola Alexis y Ernesto,<div class="gmail_extra"><br><div class="gmail_quote">2013/5/30 Alexis García Báez <span dir="ltr"><<a href="mailto:ybaez@infomed.sld.cu" target="_blank">ybaez@infomed.sld.cu</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">








<div lang="ES" link="blue" vlink="purple">

<div>

<div>

<div>

<div>

<div>

<p class=""><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Saludos de nuevo, aprovecho la oportunidad para agradecer de
nuevo a Steven nos sirvio de mucho ayuda y de no ser por otro percance ya hubiésemos
terminado nuestro proyecto aqui va la 2da duda<u></u><u></u></span></p>

<p class=""><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Como explique ayer tenemos la clase padre TCourse y las 2 hijas
TProfesorCourse y TEnterpriseCourse, hay una clase TCollectionCourse y una
controladora TEducationalCenter.<u></u><u></u></span></p>

<p class=""><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Ahora en la clase hija TProfesorCourse hay un atributo llamado
Level, que solo almacena un int, tenemos hicimos una funcion que reciba un int
y devuelva cuantas instancias TProfesorCourse tienen el atributo Level pasado con
igual valor que el int que entramos por parametros, la coleccion que es de
clase padre puede tener las 2 clases hijas eso lo solucionamos con el casteo
dinamico que nos explico Steven, el problema consiste en que pensamos que puede
haber un error a la hora de insertar los datos de las instancias de
TProfesorCourse en el arreglo de TCourse aqui les va el codigo del insertar.<u></u><u></u></span></p>

<p class=""><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> </span></p></div></div></div></div></div></div></blockquote><div><br></div><div style>La verdad es que tengo que pedir disculpas porque se me olvidó comentar acerca de un posible error que estabais cometiendo con el puntero, 'ptrCourses'. Creasteis un array dinámico de objetos de la clase 'TCourse', pero en realidad os interesa crear un array dinámico de punteros a objetos de la clase 'TCourse'; por ejemplo,</div>
<div style><br></div><div style>TCourse **ptrCourses = new TCourse*[100];  // o la cantidad que sea</div><div style><br></div><div style>ptrCourses[0] = new TEnterpriseCourse;</div><div style>ptrCourses[1] = new TProfesorCourse;<br>
</div><div style><br></div><div style>Os interesa mantener una lista de objetos polimórficos. Esto implica que necesitáis manipular los objetos a través de punteros o a través de referencias; aconsejo usar punteros porque son más flexibles. Obviamente, necesitáis herencia y que la clase base, 'TCourse' en este caso, tenga alguna función miembro virtual.</div>
<div style><br></div><div style>Obviamente, esto supone cambiar la forma de trabajar con este puntero, 'ptrCourses'; por ejemplo, el código del correo-e anterior sería ahora:<br><br><div style="font-family:arial,sans-serif;font-size:12.727272033691406px">
TProfesorCourse *ProCourse;</div><div style="font-family:arial,sans-serif;font-size:12.727272033691406px">...</div><div style="font-family:arial,sans-serif;font-size:12.727272033691406px"><br></div><div style="font-family:arial,sans-serif;font-size:12.727272033691406px">
ProCourse = dynamic_cast< TProfesorCourse * >( ptrCourses[i] );</div></div><div><br></div><div style>porque ahora cualquier elemento de 'ptrCourses' es un puntero a un objeto polimórfico.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div lang="ES" link="blue" vlink="purple"><div><div><div><div><div><p class=""><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u></span></p>

<p class=""><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">//---------------------------------------------------------------------------</span></p></div></div></div></div></div>
</div></blockquote><div style>[CORTE]</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div lang="ES" link="blue" vlink="purple">
<div><div><div><div><div>

<p class=""><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Esos son los 2 insertar, uno para cada clase hija. Traceando el
programa estamos casi seguros que el error esta en la manera de insertar que
trunca los atributos de las clases hijas y mantiene correctamente los de la
clase padre.</span></p></div></div></div></div></div></div></blockquote><div><br></div><div style>Sinceramente, no aconsejo crear estas dos funciones miembro, ya que sólo una es necesaria:<br><br>void TCourseCollection :: InsertCourse( TCourse *pCourse )<br>
</div><div style>{</div><div style>  if( length >= max )<div>    reallocate();</div><div> </div><div>  ptrCourses[length++] = pCourse;  // Meramente copiamos punteros, y no objetos</div><div>}<br></div></div><div><br></div>
<div style>Por herencia, podemos hacer esto:<br><br>tc.InsertCourse( new TProfesorCourse );</div><div style>tc.InsertCourse( new TEnterpriseCourse );<br></div><div>...</div><div><br></div><div style><br></div><div style>Espero que esto os sirva.</div>
<div><br></div><div style>Steven</div><div style><br></div></div></div></div>