sirven - punteros en c++ ejercicios resueltos pdf
¿Qué significa establecer la declaración de una función igual a 0? ¿Cómo se puede asignar un número entero a una función? (3)
Estaba navegando por las fuentes de un GUI Toolkit (prefiero no nombrar) que envolvió la API de Windows cuando encontré la siguiente definición de función en la clase de ventana:
virtual LRESULT CALLBACK wndProc (HWND, UINT, WPARAM, LPARAM) = 0;
¿Que está sucediendo aquí? ¿Cómo se puede asignar una función a un número entero? ¿O lo asigna a NULL
? ¿Necesita hacer esto si quiere usar punteros a funciones en wndproc?
Es una función virtual pura .
The =0
es solo la sintaxis utilizada para indicar que se trata de una función virtual pura.
La presencia de una función virtual pura en una clase hace que la clase sea una clase abstracta . Uno no puede crear un objeto de ninguna clase abstracta. Aunque, se puede crear un puntero o referencia a dicha clase abstracta. Su clase derivada necesita anular ese método.
¿Cuál es el propósito de hacer una función puramente virtual?
Por lo general, una función se hace puramente virtual para que el diseñador de la clase Base abstracta pueda aplicar la clase derivada para anular esa función y proporcionar su propia implementación. Sin embargo, es importante tener en cuenta que una función virtual pura puede tener una implementación propia, por lo que la clase derivada puede llamar a la versión de la clase Base de la función.
Algunas veces se agrega una función virtual pura solo para hacer que la clase base sea abstracta (por lo tanto, no se pueden crear instancias). Por lo general, en una situación así, en lugar de agregar una función ficticia para hacer una clase, el destructor de la clase se convierte en puro virtual.
Esa línea de código define una función virtual pura en C ++. No tiene nada que ver con la API de Win32 o el código de GUI en general.
Una función virtual pura es una función virtual que se utiliza cuando el diseñador de la clase quiere obligar a las clases derivadas a anular la función y proporcionar su propia implementación.
Si una clase contiene funciones virtuales puras, se considera una clase "abstracta" y las instancias de esa clase no se pueden crear instancias.
C ++ usa la sintaxis especial = 0;
para indicar funciones virtuales puras en lugar de agregar una nueva palabra clave al idioma (como lo hacen los lenguajes como C #). Puede pensar que configura el puntero a 0.
También vea las respuestas a esta pregunta relacionada: ¿Cuáles son los usos de las funciones virtuales puras en C ++?
(Por cierto, los archivos de encabezado de Windows < windows.h
> simplemente definen NULL
como 0. Entonces el programador técnicamente podría haber escrito = NULL
, pero es mucho más claro usar la constante numérica 0 y reservar NULL
para los valores de puntero).
Esta es una función " pura virtual " que necesita anular en una clase derivada.