La diferencia entre sobrecargar, cubrir y esconderse

La explicación detallada de sobrecarga, sobrescritura y ocultación es Google;
(El siguiente <parámetro de función es el mismo> se refiere a la cantidad de parámetros, el tipo de parámetro y el tipo de retorno son los mismos)
Primero, sobrecarga (sobrecarga):
características: el mismo nombre de función, parámetros de función Diferente, debe estar en el mismo dominio (clase);
Segundo, anular:
Características: El nombre de la función es el mismo, el parámetro de la función es el mismo, se encuentran en la clase derivada y la clase base, virtual (función virtual);
Tres, ocultar (ocultar) :
A saber: la función en la clase derivada oculta (protege) la función con el mismo nombre en la clase base.
Caso 1: el nombre de la función es el mismo, el parámetro de la función es el mismo y se ubican en las clases derivada y base, respectivamente, virtuales, para cobertura;
Caso 2: el nombre de la función es el mismo, los parámetros de la función son los mismos y están en las clases derivada y base, respectivamente, está oculto; La diferencia con la cobertura es si la función en la clase base es una función virtual)
Caso 3: El nombre de la función es el mismo, el parámetro de la función es diferente y se ubican en la clase derivada y en la clase base para ocultar; (es decir, la diferencia de la sobrecarga es si las dos funciones están en En el mismo dominio (clase))
sobre la comprensión oculta, al llamar a una función miembro de una clase, el compilador buscará la definición de la función paso a paso a lo largo de la cadena de herencia de la clase, si se encuentra, dejará de buscar; por lo tanto, si una derivada Tanto la clase como una clase base tienen una función del mismo nombre (independientemente de si los parámetros de la función son los mismos), y el compilador finalmente selecciona la función en la clase derivada, luego la función miembro de esta clase derivada "oculta" la función del mismo nombre de la clase base, Es decir, evita que el compilador continúe buscando la definición de la función. (Entonces, para el caso anterior 3, la función del mismo nombre, aunque los parámetros de la función son diferentes, pero se encuentra en la clase derivada y la clase base, la función de la clase base protegerá el punto de vista estético.) Enlace de referencia: interfaz de enlace
Un punto adicional: sobre el caso oculto 2, es equivalente a redefinir la función no virtual en la clase base, que en realidad no es buena. Para más detalles, consulte el Artículo 36 en "C ++ efectivo": nunca redefina la herencia no virtual heredada Función.

Publicado 9 artículos originales · me gusta 0 · visitas 253

Supongo que te gusta

Origin blog.csdn.net/a_465240/article/details/105194074
Recomendado
Clasificación