Id. de artículo: 94579 - Última revisión: jueves, 11 de diciembre de 2003 - Versión: 2.0 INFORMACIÓN: Crear un puntero de función a una función miembro de C++En esta páginaResumenEl texto siguiente describe la generación de un puntero a función para una función miembro de clase en código compilado con Microsoft C/C ++ versión 7.0 o posterior. La declaración de un puntero a una función miembro de clase debe incluir el nombre de la clase. Sin embargo, el nombre de clase, se omite de la declaración de un puntero a una función miembro estática. Más informaciónEn los lenguajes C y C++, una aplicación puede definir una variable que contiene la dirección de una función. Se puede llamar a la función utilizando esta variable en lugar de mediante el nombre de función. En C++, un puntero a una función miembro no estático contiene la dirección de la función de la clase, no en el objeto. Para llamar a la función, utilice el operador de selección de miembro correspondiente (. o->), el operador de direccionamiento indirecto (*) y el nombre de un objeto de la clase. En la mayoría de los casos en el lenguaje C, las declaraciones de puntero de función toman la forma siguiente: int (*ptr)(); int (Sample::*ptr)(); Las maneras de interpretar los paréntesis vacíos en las declaraciones de función es una diferencia principal entre los lenguajes C y C++. En C, una declaración de puntero de función que no tiene argumentos es sintácticamente idéntica a la siguiente: int (*ptr)(...); int (Sample::*ptr)(void); int (Sample::*ptr2)(int, int); Para determinar la dirección de procedimiento para asignar a una variable de puntero, utilice el nombre de clase y el operador de resolución de ámbito (::). Esta sintaxis proporciona flexibilidad porque una variable declarada puede contener la dirección de cualquier objeto de la clase. El nombre del objeto en la llamada de función determina la copia de la función utilizada. El código de ejemplo siguiente muestra punteros de declarar y utilizas una función miembro de clase a una función miembro estática. Tenga en cuenta que cuando los argumentos de la declaración de puntero de función no coinciden con los argumentos de la función asignada al puntero, el compilador genera errores C2440 y C2564. Por ejemplo, si se omite la declaración "int" en la declaración de lista de argumento para el puntero de función, el compilador genera los mensajes de error siguientes: 16-bitel error C2440: 'inicialización': no se puede convertir de ' void (__pascal __far datos:: *) (int) __near 'a' void (__pascal __far datos:: *) (void) __near ' Error C2564: parámetros formales y reales no coinciden en la llamada a través del puntero a función 32 bitsel error C2440: 'inicialización': no se puede convertir de ' void (Data::*)(int) a ' void (Data::*)(void)" Error C2197: ' void (Data::*)(void) ': hay demasiados parámetros reales Código de ejemplo79845
(http://support.microsoft.com/kb/79845/EN-US/
)
INFORMACIÓN: No se admiten declaraciones de estilo (K & R) anterior en C++ La información de este artículo se refiere a:
Traducción automáticaIMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente. Haga clic aquí para ver el artículo original (en inglés): 94579
(http://support.microsoft.com/kb/94579/en-us/
)
| Seleccione idioma
|



Volver al principio
