Diferencia entre redefinir y sobreescribir una función


Supongamos que tengo una clase A con una función virtual F():

class A
{
    virtual void F()
    {
        // Do something
    };
};

Y tengo otra clase B que hereda A y redefine F():

class B : A
{
    void F()
    {
        // Do something
    };
};

Y una clase diferente C que también hereda A pero reemplaza F():

class C : A
{
    void F() override
    {
        // Do something
    };
};

¿Cuál es la diferencia entre F() en las clases B y C?

Author: Deduplicator, 2016-02-19

2 answers

Tanto B::f() como C::f() son sobreescrituras y son exactamente lo mismo.

override es esencialmente un término de asesoramiento en tiempo de compilación que causará un error de compilación si la función hace no sobreescribir uno en una clase base.

Esto puede ayudar a la estabilidad del programa: si se cambian los tipos de nombre y parámetro de A::f(), entonces se producirá un error de compilación.

 24
Author: Bathsheba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-19 15:37:33

Ambos son sobreescrituras.

Cuando usas la palabra clave override te aseguras de que se produce un error de compilación si sucede que no es una sobreescritura.

Y esa es una buena práctica.

 29
Author: Cheers and hth. - Alf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-19 13:46:50