Sobes.tech
Junior

¿Qué son la sobrecarga y la sobrescritura de métodos en C++?

sobes.tech AI

Respuesta de la IA

Sobrecarga de métodos (Method Overloading):

  • Permite tener varios métodos con el mismo nombre en una clase.
  • Se diferencian por firma (cantidad y/o tipos de parámetros).
  • El tipo de retorno no participa en la definición de la firma para la sobrecarga.
  • La selección de un método específico la determina el compilador en función de los tipos de argumentos en la llamada (enlace estático).
class MyClass {
public:
    void print(int a) {
        // Imprimir número entero
    }

    void print(double d) {
        // Imprimir número de punto flotante
    }

    void print(int a, int b) {
        // Imprimir dos números enteros
    }
};

Sobrescritura de métodos (Method Overriding):

  • Permite a la clase heredada proporcionar una implementación específica de un método que ya está definido en la clase base.
  • El método en la clase heredada debe tener la misma firma (nombre, cantidad y tipos de parámetros) y el mismo tipo de retorno (o un tipo de retorno covariante).
  • Se usa con funciones virtuales (virtual) para implementar el polimorfismo.
  • La selección de la implementación concreta del método se determina en tiempo de ejecución (enlace dinámico), dependiendo del tipo real del objeto.
class Base {
public:
    virtual void display() {
        // Implementación en la clase base
    }
};

class Derived : public Base {
public:
    void display() override { // La palabra clave override (desde C++11) ayuda a evitar errores
        // Implementación específica en la clase heredada
    }
};

Diferencias principales:

Característica Sobrecarga de Métodos Sobrescritura de Métodos
Lugar de aplicación En una misma clase En clases base y derivadas
Nombre del método Mismo Mismo
Firma del método Diferente Igual
Mecanismo de selección Enlace estático (compilación) Enlace dinámico (ejecución)
Se usa con Funciones normales Funciones virtuales
Objetivo Acciones diferentes para distintos tipos Implementación específica en la herencia