<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
<BR><BR>
<DIR><B><FONT color=#008080 size=5></DIR></B></FONT>  NO se como suscribirme ala clase de c++ desde cero gracias.<BR><BR><BR> 
<P><BR>> From: cconclase-request@listas.conclase.net<BR>> Subject: Resumen de Cconclase, Vol 40, Envío 12<BR>> To: cconclase@listas.conclase.net<BR>> Date: Sat, 12 Sep 2009 12:00:01 +0200<BR>> <BR>> Envíe los mensajes para la lista Cconclase a<BR>> cconclase@listas.conclase.net<BR>> <BR>> Para subscribirse o anular su subscripción a través de la WEB<BR>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<BR>> <BR>> <BR>> O por correo electrónico, enviando un mensaje con el texto "help" en<BR>> el asunto (subject) o en el cuerpo a:<BR>> cconclase-request@listas.conclase.net<BR>> <BR>> Puede contactar con el responsable de la lista escribiendo a:<BR>> cconclase-owner@listas.conclase.net<BR>> <BR>> Si responde a algún contenido de este mensaje, por favor, edite la<BR>> linea del asunto (subject) para que el texto sea mas especifico que:<BR>> "Re: Contents of Cconclase digest...". Además, por favor, incluya en<BR>> la respuesta sólo aquellas partes del mensaje a las que está<BR>> respondiendo.<BR>> <BR>> <BR>> Asuntos del día:<BR>> <BR>> 1. Re: tipo estructurado algo complejo (José Álvaro Domínguez Díaz)<BR>> 2. Re: tipo estructurado algo complejo (Steven Davidson)<BR>> <BR>> <BR>> ----------------------------------------------------------------------<BR>> <BR>> Message: 1<BR>> Date: Fri, 11 Sep 2009 16:06:46 +0200<BR>> From: José Álvaro Domínguez Díaz <ilgrim@gmail.com><BR>> Subject: Re: [C con Clase] tipo estructurado algo complejo<BR>> To: Lista de correo sobre C y C++ <cconclase@listas.conclase.net><BR>> Message-ID: <4AAA5976.4060802@gmail.com><BR>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed<BR>> <BR>> Susana Sacie wrote:<BR>> > hola, pues vereis, estoy trabando con el siguiente tipo estructurado <BR>> > pero no logro entender su estructura, a ver si me la podeis describir:<BR>> ><BR>> Muy buenas.<BR>> <BR>> > struct mrtd_handle {<BR>> > int dgpresent;<BR>> > struct {<BR>> > int (*transceive)(struct mrtd_handle *h, //este es el mismo tipo <BR>> > estructurado que estoy declarando<BR>> > unsigned char *sbuf, unsigned int slen,<BR>> > unsigned char *rbuf, unsigned int *rlen);<BR>> > } fn;<BR>> > };<BR>> > <BR>> > y lo que no entiendo es el uso que hago de este tipo, os pongo una <BR>> > funcion y llamadas que usan este tipo:<BR>> > <BR>> > void llamada (struct mrtd_handle *h){<BR>> > int a;<BR>> > unsigned char cmd[5] = { 0x00, 0x84, 0x00, 0x00, 0x00 };<BR>> > unsigned char retbuf[256+2];<BR>> > unsigned int retlen = sizeof(retbuf);<BR>> > <BR>> > *a=h->fn.transceive(h, cmd, 5, retbuf, &retlen); *//parece como si fuese <BR>> > una función, incluso pasa retlen<BR>> > <BR>> > //por referencia para que la modifique<BR>> <BR>> <BR>> De hecho, es un puntero a funcion. Suele ser un uso avanzadillo de los <BR>> punteros.<BR>> Imagina tener una matriz de varios punteros a funcion y poder ejecutar <BR>> una u otra dependiendo de un valor determinado, unicamente referenciando <BR>> al indice de la posicion que ocupa en el array. Tiene sus limitaciones, <BR>> pero puede ser util en ocasiones(Creo haber visto algo similar <BR>> utilizando Ncurses).<BR>> <BR>> > if (a<0) {// ahora analiza el valor de a, yo pienso que este valor <BR>> > habrá sido almacenado antes ya que<BR>> > // la variable h es usada por otra funcion antes de <BR>> > pasarla a la funcion llamada. <BR>> > return a;<BR>> > }<BR>> > <BR>> > return 0;<BR>> > }<BR>> > <BR>> > y despues por ejemplo tengo una función con una serie de parametros:<BR>> > <BR>> > static int librfid(struct mrtd_handle *h , const unsigned char *cmd, <BR>> > unsigned int len, unsigned char *resp, unsigned int *rlen); //esta <BR>> > funcion devuelve un entero en funcion de los parametros que se le pasan<BR>> > <BR>> > y ahora de repente hago la siguiente llamada en otra función:<BR>> > struct mrtd_handle *h;<BR>> > *h->fn.transceive = librfid*; //¿ porque se puede llamar a librfid <BR>> > sin pasarle ningun parametro?<BR>> > <BR>> <BR>> Ni idea. Imagino que ya tiene todo lo que necesita en memoria al <BR>> haberselo pasado antes y no haber sido modificado(supongo), no lo se la <BR>> verdad. Me resulta bastante extraño tambien.<BR>> <BR>> Un Saludo.<BR>> <BR>> <BR>> <BR>> ------------------------------<BR>> <BR>> Message: 2<BR>> Date: Fri, 11 Sep 2009 11:56:16 -0400<BR>> From: Steven Davidson <srd4121@njit.edu><BR>> Subject: Re: [C con Clase] tipo estructurado algo complejo<BR>> To: Lista de correo sobre C y C++ <cconclase@listas.conclase.net><BR>> Message-ID: <4AAA7320.1080709@njit.edu><BR>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed<BR>> <BR>> Hola Susana,<BR>> <BR>> Susana Sacie wrote:<BR>> > hola, pues vereis, estoy trabando con el siguiente tipo estructurado <BR>> > pero no logro entender su estructura, a ver si me la podeis describir:<BR>> > <BR>> <BR>> José Álvaro ya te ha explicado que se trata de un puntero a una función. <BR>> Sugiero consultar el capítulo 20 de nuestro curso de C++. El enlace es: <BR>> http://c.conclase.net/curso/index.php?cap=020b#FUN3_puntfunc<BR>> <BR>> > <BR>> > a=h->fn.transceive(h, cmd, 5, retbuf, &retlen); //parece como si fuese <BR>> > una función, incluso pasa retlen<BR>> > <BR>> > //por referencia para que la modifique<BR>> <BR>> Estamos invocando la función que el campo 'transceive' tiene guardada. <BR>> Como se trata de una función, podemos invocarla como cualquier otra.<BR>> <BR>> > if (a<0) {// ahora analiza el valor de a, yo pienso que este valor <BR>> > habrá sido almacenado antes ya que<BR>> > // la variable h es usada por otra funcion antes de <BR>> > pasarla a la funcion llamada. <BR>> <BR>> Efectivamente. Acaba de ser almacenado en la sentencia anterior:<BR>> <BR>> a = h->fn.transceive( h, cmd, 5, retbuf, &retlen );<BR>> <BR>> Has guardado el valor de retorno de la llamada a la función en 'a', que <BR>> es un 'int'.<BR>> <BR>> > return a;<BR>> > }<BR>> > <BR>> > return 0;<BR>> > }<BR>> > <BR>> > y despues por ejemplo tengo una función con una serie de parametros:<BR>> > <BR>> > static int librfid(struct mrtd_handle *h , const unsigned char *cmd, <BR>> > unsigned int len, unsigned char *resp, unsigned int *rlen); //esta <BR>> > funcion devuelve un entero en funcion de los parametros que se le pasan<BR>> > <BR>> > y ahora de repente hago la siguiente llamada en otra función:<BR>> > struct mrtd_handle *h;<BR>> > h->fn.transceive = librfid; //¿ porque se puede llamar a librfid <BR>> > sin pasarle ningun parametro?<BR>> > <BR>> <BR>> La respuesta es que no estamos llamando a 'librfid'. Lo que estamos <BR>> haciendo es asignar la función 'librfid' al puntero 'transceive'. <BR>> Posteriormente, invocaremos a 'librfid' a través de 'transceive', como <BR>> haremos en 'llamada'.<BR>> <BR>> Esto se aclarará cuando veas y estudies el tema de punteros a funciones.<BR>> <BR>> <BR>> Espero haber aclarado las dudas.<BR>> <BR>> Steven<BR>> <BR>> <BR>> <BR>> <BR>> <BR>> ------------------------------<BR>> <BR>> _______________________________________________<BR>> Cconclase mailing list<BR>> Cconclase@listas.conclase.net<BR>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<BR>> <BR>> <BR>> Fin de Resumen de Cconclase, Vol 40, Envío 12<BR>> *********************************************<BR><br /><hr />¿Quieres un regalo de cumpleaños?  <a href='www.aniversariomessenger.com.mx' target='_new'>Messenger te lo da</a></body>
</html>