Red de conocimiento informático - Espacio del host - ¿Cómo entender la desreferencia de los punteros de funciones miembro?

¿Cómo entender la desreferencia de los punteros de funciones miembro?

p es un puntero a un objeto de la clase Base (y sus subclases). pf es un puntero a una función miembro de la clase Base. Es decir, pf es un puntero a una función, pero solo se puede usar para apuntar a funciones miembro de la clase Base. Por supuesto, esta función miembro también debe cumplir con la firma. definido por pf, es decir, no requiere parámetros y tiene un tipo de retorno nulo.

Entonces p-gt; significa hacer referencia a un determinado miembro del objeto señalado por p (puede ser un miembro de datos o un miembro de función). Por ejemplo, p-gt;print(); puede entenderse como una llamada al método print del objeto señalado por p. Pero una cosa a tener en cuenta aquí es: imprimir es una función virtual y p puede apuntar a una subclase. Por lo tanto, lo que realmente se llama puede ser la versión de subclase del método de impresión.

Debido a que pf es un puntero a una función miembro de la clase Base, *pf es la función miembro a la que apunta pf.

Y (p-gt; *pf)(); es llamar a la función miembro señalada por pf del objeto señalado por p. En pocas palabras, se llama a una función miembro del objeto señalado por p, pero esa función miembro está dada por el puntero pf.