Diferencia entre la sobrecarga de funciones y la anulación en C ++

Autor: Laura McKinney
Fecha De Creación: 1 Abril 2021
Fecha De Actualización: 11 Mayo 2024
Anonim
Diferencia entre la sobrecarga de funciones y la anulación en C ++ - Tecnología
Diferencia entre la sobrecarga de funciones y la anulación en C ++ - Tecnología

Contenido


En ‘sobrecarga‘Redefinimos las funciones sobrecargadas con el mismo nombre de función pero diferente número y tipo de parámetros. En ‘primordial‘El prototipo de la función anulada es el mismo en todo el programa, pero la función a anular va precedida de la palabra clave" virtual "en la clase base y la clase derivada la redefine sin ninguna palabra clave.

El polimorfismo es una de las características cruciales de la POO. Simplemente significa "usar un nombre para múltiples formas". El polimorfismo se puede implementar utilizando "sobrecarga de funciones", "sobrecarga de operadores" y "función virtual". Tanto "sobrecarga" como "anulación" implica el concepto de polimorfismo. Aquí, "sobrecarga" es un polimorfismo en tiempo de compilación y "anulación" es un polimorfismo en tiempo de ejecución. Si seguimos estudiando, hablamos de la gran diferencia en "sobrecarga" y "anulación".


Además, estudiamos la diferencia entre sobrecargar y anular con la ayuda de un cuadro de comparación.

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Similitudes
  5. Conclusión


Cuadro comparativo:

Bases para la comparaciónSobrecargaPrimordial
PrototipoEl prototipo difiere ya que el número o tipo de parámetro puede diferir.Todos los aspectos del prototipo deben ser iguales.
Palabra claveNinguna palabra clave aplicada durante la sobrecarga.La función que se va a reemplazar está precedida por la palabra clave virtual, en la clase base.
Factor distintivoEl número o tipo de parámetro difiere, lo que determina la versión de la función que se llama.El puntero determina qué función de clases está determinada por la dirección de qué objeto de clase se asigna a ese puntero.
Patrón definitorioLas funciones se redefinen con el mismo nombre, pero con diferente número y tipo de parámetro.La función se define, precedida por una palabra clave virtual en la clase principal y redefinida por una clase derivada sin palabra clave.
Tiempo de realizaciónTiempo de compilación.Tiempo de ejecución.
Constructor / Función virtualLos constructores pueden sobrecargarse.La función virtual puede ser anulada.
Incinerador de basuras
Destructor no se puede sobrecargar.Destructor puede ser anulado.
UniónLa sobrecarga logra la unión temprana.La anulación se refiere a la unión tardía.


Definición de sobrecarga

El polimorfismo en tiempo de compilación se denomina "sobrecarga". Como la sobrecarga se genera a partir de un concepto de polimorfismo, proporciona "una interfaz común para múltiples métodos". Eso significa que si una función se sobrecarga, contiene el mismo nombre de función mientras se redefine.

Las funciones sobrecargadas difieren en cuanto a diferentes 'números o tipos de parámetros', hace que una función sobrecargada sea distinta de otra. De esta manera, el compilador reconoce qué función sobrecargada se está llamando. Las funciones sobrecargadas más comúnmente son "constructores". "Copiar constructor" es una especie de "sobrecarga del constructor".

Implementación de sobrecarga en C ++

sobrecarga de clase {int a, b; public: int load (int x) {// primera función load () a = x; devolver a; } int load (int x, int y) {// segunda función load () a = x; b = y; devuelve a * b; }}; int main () {sobrecarga O1; O1.load (20); // primera llamada a la función load () O1.load (20,40); // segunda llamada a la función load ()}

Aquí la función load () de sobrecarga de clase se ha sobrecargado. Las dos funciones sobrecargadas de la clase se pueden distinguir de manera que la primera función load () acepte solo un parámetro entero único, mientras que la segunda función load () acepta dos parámetros enteros. Cuando el objeto de la sobrecarga de la clase llama a la función load () con un solo parámetro, se llama a la primera función load (). Cuando el objeto llama a la función load () que pasa dos parámetros, se llama a la segunda función load ().

Definición de anulación

El polimorfismo logrado durante el tiempo de ejecución se denomina "anulación". Se logra mediante el uso de "herencia" y "funciones virtuales". La función que se va a reemplazar está precedida por la palabra clave "virtual" en una clase base y se redefine en una clase derivada sin ninguna palabra clave.

Una de las cosas más importantes para recordar en caso de anulación es que el prototipo de la función anulada no debe cambiar mientras la clase derivada la redefine. Cuando se llama a una función anulada, C ++ determina qué versión de la función se llama en función del "tipo de objeto señalado por un puntero" mediante el cual se realiza la llamada a la función.

Implementación de anulación en C ++

class base {public: virtual void funct () {// función virtual de base class cout << "Esta es una función de clase base ()"; }}; clase derivada1: base pública {public: void funct () {// función virtual de la clase base redefinida en derivada de clase derivada << "Esta es una función derivada de 1 clase ()"; }}; clase derivada2: base pública {public: void funct () {// función virtual de la clase base redefinida en derivada de clase derivada << "Esta es una función derivada de 2 clases ()"; }}; int main () {base * p, b; derivado1 d1; derivado2 d2; * p = & b; p-> funct (); // llama a la clase base funct (). * p = & d1; p-> funct (); // llama a deriva1 class funct (). * p = & d2; p-> funct (); // llama a deriva2 class funct (). devuelve 0; }

Aquí, hay una única clase base que es heredada públicamente por dos clases derivadas. Una función virtual se define en una clase base con una palabra clave "virtual", y ambas clases derivadas la redefinen sin palabra clave. En main (), la clase base crea una variable de puntero "p" y un objeto "b"; La clase 'derivada1' crea un objeto d1 y la clase derivada2 crea un objeto d2 '.

Ahora, inicialmente la dirección del objeto de la clase base 'b' se asigna al puntero de la clase base 'p'. ‘P’ llama a la función funct (), por lo que se llama a una función de la clase base.Luego, la dirección del objeto de clase derivado "d1" se asigna al puntero "p", nuevamente se llama a funct (); aquí se ejecuta la función funct () de la clase derivada1. Finalmente, el puntero 'p' se asigna al objeto de la clase derivada2. Luego ‘p’ llama a la función funct () que ejecuta la función funct () de la clase derivada2.

Si la clase derivada1 / derivada2 no redefiniera funct (), entonces la función () de la clase base se habría llamado, ya que las funciones virtuales son "jerárquicas".

  1. El prototipo de una función que se está sobrecargando difiere debido al tipo y número de parámetros que se pasan a la función sobrecargada. Por otro lado, el prototipo de la función anulada no cambia porque una función anulada realiza una acción diferente para una clase diferente a la que pertenece pero con el mismo tipo y número de parámetro.
  2. El nombre de la función sobrecargada no precede a ninguna palabra clave, mientras que el nombre de una función anulada precede al teclado "Virtual" en la clase base solamente.
  3. La función sobrecargada que se invoca depende del tipo o número de parámetro que se pasa a la función. La función anulada de qué clase se invoca depende de qué dirección de objeto de clase se asigna al puntero, que invocó la función.
  4. La función sobrecargada que se va a invocar se resuelve durante el tiempo de compilación. La función anulada a invocar se resuelve durante el tiempo de ejecución.
  5. Los constructores se pueden sobrecargar pero no se pueden anular.
  6. Los destructores no se pueden sobrecargar, pero se pueden anular.
  7. La sobrecarga logra un enlace temprano, ya que la función sobrecargada que se invocará se resuelve durante el tiempo de compilación. La anulación logra un enlace tardío, ya que la función anulada que se invocará se resuelve durante el tiempo de ejecución.

Similitudes

  1. Ambos se aplican a las funciones miembro de una clase.
  2. El polimorfismo es el concepto básico detrás de ambos.
  3. El nombre de la función permanece igual mientras aplicamos sobrecarga y anulación a las funciones.

Conclusión

La sobrecarga y la anulación parecen similares, pero este no es el caso. Las funciones se pueden sobrecargar, pero cualquier clase no puede redefinir aún más la función sobrecargada en el futuro. Una función virtual no se puede sobrecargar; solo pueden ser anulados.