INFORMACIÓN: Crear un puntero a una función miembro de C++ a función![]() AVISO: Gracias por utilizar el servicio de Traducción Automática. Este artículo ha sido traducido por un sistema informático sin ayuda humana (Machine Translation). Microsoft ofrece estos artículos a los usuarios que no comprendan el inglés, exclusivamente, con el fin de que puedan entenderlos más fácilmente. Microsoft no se hace responsable de la calidad lingüística de las traducciones ni de la calidad técnica de los contenidos de los artículos así como tampoco de cualesquiera problemas, directos o indirectos, que pudieran surgir como consecuencia de su utilización por los lectores. Haga clic aquí para ver el artículo original (en inglés): 94579 (http://support.microsoft.com/kb/94579/en-us/)
En esta páginaResumen
El texto siguiente describe que genera un puntero a una función miembro de clase en código compilado con versión Microsoft C/C++ 7.0 o posterior a función. La declaración de un puntero a una función miembro de clase debe incluir el nombre de clase. No obstante, el nombre de clase se omite de la declaración de un puntero a una función miembro estática.
Más información
En 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 que utiliza esta variable mediante el nombre de función. En C++, un puntero a una función miembro no estática contiene la dirección de la función en el class, no en el objeto. Para llamar a la función, utiliza 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 casos en el lenguaje C, las declaraciones de puntero de función toman la forma siguiente: int (*ptr)();Este código declara un puntero a una función que devuelve un entero. La función acepta un número de que aumentan desconocido. Para crear un puntero a una función miembro de clase de C++, especifique el nombre de clase en la declaración de puntero de función de manera siguiente: int (Sample::*ptr)();Este código declara un puntero a una función miembro de la clase de Ejemplo que devuelve un entero. Esta función no acepta ningún argumento. El ways diferente que interpreta los paréntesis vacíos en 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 ningún argumento es sintácticamente idéntica a lo siguiente: int (*ptr)(...);Sin embargo, un prototipo de C++ declarado sin argumentos es sintácticamente idéntico a lo siguiente: int (Sample::*ptr)(void);En C++, si la función acepta argumentos, también los tipos de los argumentos deben aparecer como en lo siguiente: int (Sample::*ptr2)(int, int);En C, los tipos de los argumentos se pueden enumerar de la misma manera. Un puntero a una función miembro estática se declara de la misma manera como un puntero a una función de C. Sin embargo, puesto que la declaración trata de parte de un programa de C++, la declaración debe mostrar ningún argumento y sus tipos asociados. Para determinar si la dirección de procedimiento asigna a una variable de puntero, utiliza el nombre de clase y el operador de resolución de ámbito ( : :) . ) Esta sintaxis proporciona flexibilidad como una variable declarada puede contener la dirección de cualquier objeto de la clase. El nombre de objeto en la llamada a función determina la copia de la función utilizada. El código de ejemplo siguiente muestra punteros a una función miembro de clase y una función miembro estática declarativo y que utilizan. Tenga en cuenta que cuando no coinciden los argumentos en la declaración de puntero de función con los argumentos de la función asignada al puntero, el compilador genera errores Error C2440 y C2564. Por ejemplo, si la declaración "int" se omite de enumerar declaración de argumento para el puntero a función, el compilador genera los mensaje de error siguientes: 16 bits
error : : ' void ( : * ) (int) ( : * ) (void) ' "inicializa" no se puede realizar la conversión __pascal __far Datos __near para anular __pascal __far Datos Error C2440
error : C2564 los parámetros formal/actual no coinciden en llamada a función a través de puntero 32 bits
error : : ' void ( ' ) "inicializa" no se puede realizar la conversión Data::*)(int) para void ("Data::*)(void)") Error C2440 error : ' void ( Data::*)(void) ' : ) C2197 demasiados parámetros reales Código de ejemplo
Para más información acerca de listas de parámetros en declaraciones de función y cómo son controlados éstos por C y C++, consulte el artículo siguiente en el Microsoft Knowledge Base:
79845 (http://support.microsoft.com/kb/79845/EN-US/) INFO: No se admite declaraciones antiguas Estilo (K & R) en C++
La información de este artículo se refiere a:
| Seleccione idioma
|

Volver al principio
