Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Sobreescritura de funciones en C++ explicada: ejemplos prácticos y mejores prácticas

Sobreescritura de funciones en C++ explicada

Esta guía desmitifica la sobreescritura de funciones en C++, proporcionando ejemplos claros, mejores prácticas y un recorrido paso a paso que un desarrollador experimentado en C++ usaría en producción.

Por qué importa la sobreescritura de funciones

En la programación orientada a objetos, la herencia permite que una clase derivada extienda o modifique el comportamiento de una clase base. Cuando la misma función miembro se declara tanto en la clase base como en la derivada, la implementación derivada "sobreescribe" a la base. Cuando llama a esa función a través de un objeto de la clase derivada, se ejecuta la versión sobreescrita.


Ejemplo 1: Sobreescritura básica

#include <iostream>
using namespace std;

class Base {
public:
    void imprimir() {
        cout << "Función Base" << endl;
    }
};

class Derivada : public Base {
public:
    void imprimir() {
        cout << "Función Derivada" << endl;
    }
};

int main() {
    Derivada d;
    d.imprimir();
    return 0;
}

Salida

Función Derivada

Llamar a imprimir() en una instancia de Derivada ejecuta la función sobreescrita, no la versión base.

Sobreescritura de funciones en C++ explicada: ejemplos prácticos y mejores prácticas

Si crea un objeto Base y llama a imprimir(), verá la implementación original de la base.

Base b; b.imprimir(); // Salida: Función Base

Accediendo a la función base sobreescrita

A veces necesita invocar la versión de la clase base explícitamente. Dos técnicas comunes son:

Ejemplo 2: Resolución de ámbito para llamar a función base

#include <iostream>
using namespace std;

class Base {
public:
    void imprimir() {
        cout << "Función Base" << endl;
    }
};

class Derivada : public Base {
public:
    void imprimir() {
        cout << "Función Derivada" << endl;
    }
};

int main() {
    Derivada d1, d2;
    d1.imprimir();
    d2.Base::imprimir(); // Llamada explícita a Base::imprimir
    return 0;
}

Salida

Función Derivada
Función Base

Ejemplo 3: Llamar a función base desde dentro de la derivada

#include <iostream>
using namespace std;

class Base {
public:
    void imprimir() {
        cout << "Función Base" << endl;
    }
};

class Derivada : public Base {
public:
    void imprimir() {
        cout << "Función Derivada" << endl;
        Base::imprimir(); // Invocar versión base
    }
};

int main() {
    Derivada d;
    d.imprimir();
    return 0;
}

Salida

Función Derivada
Función Base

Ejemplo 4: Usar puntero base para acceder a función base

#include <iostream>
using namespace std;

class Base {
public:
    void imprimir() {
        cout << "Función Base" << endl;
    }
};

class Derivada : public Base {
public:
    void imprimir() {
        cout << "Función Derivada" << endl;
    }
};

int main() {
    Derivada d;
    Base* ptr = &d; // Puntero a Base apuntando a objeto Derivada
    ptr->imprimir(); // Llama a Base::imprimir porque la función no es virtual
    return 0;
}

Salida

Función Base

Cuando la función no se declara virtual, un puntero a clase base invoca la implementación base. Para lograr comportamiento polimórfico real, declare la función base como virtual y sobreescríbala en la clase derivada.


Estos ejemplos ilustran la mecánica de la sobreescritura de funciones en C++. Al dominar estos conceptos, puede escribir código más limpio y mantenible que aproveche el polimorfismo efectivamente.

Lenguaje C

  1. Dominando los Operadores en C++: Guía Completa con Ejemplos Prácticos
  2. Comentarios en C++: Mejores Prácticas para Código Legible y Mantenible
  3. Cómo Pasar Arrays a Funciones en C++: Guía Práctica
  4. Funciones en C++ Explicadas con Ejemplos de Código Prácticos
  5. Dominando funciones en C: Estructura, declaración y mejores prácticas
  6. Lenguaje de Programación C++: Visión General y Características Clave
  7. Constantes y Literales en C++: Tipos, Sintaxis y Mejores Prácticas
  8. Guía Completa de Operadores en C++: Tipos, Uso y Mejores Prácticas
  9. Dominando los Tipos Numéricos en C++: Guía Práctica
  10. Dominando la Sobrecarga en C++: Funciones y Operadores Explicados
  11. Entendiendo el Polimorfismo en C++: Guía Práctica