es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C++: Cómo anular un método de una clase específica con la misma interfaz

Tengo una situación en la que necesito heredar de dos clases con la misma interfaz, pero anularlos por separado y definitivamente no puedo ajustar las interfaces. Ver el siguiente ejemplo de código

“`C++
template
struct Foo
{
virtual ~Foo() = default;
virtual void foo() = 0;
};

struct Derived : public Foo, public Foo
{

h1>if 0 // Tener algo así sería genial, pero desafortunadamente no funciona

void Foo::foo() override
{
std::cout << “Foo::foo()” << std::endl;
}

void Foo::foo() override
{
std::cout << “Foo::foo()” << std::endl;
}

h1>endif

};

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, podemos usar la palabra clave “using” para especificar explícitamente qué método “foo” queremos llamar en la clase “Derived”. Podemos crear dos métodos separados, cada uno llamando al respectivo método “foo” de las clases heredadas.

    “`C++
    struct Derived : public Foo, public Foo
    {
    using Foo::foo;
    using Foo::foo;

    void foo_int() override
    {
        Foo<int>::foo();
    }
    
    void foo_double() override
    {
        Foo<double>::foo();
    }
    

    };
    “`

    De esta manera, podemos anular los métodos por separado sin cambiar las interfaces. Podemos llamar a estos métodos utilizando objetos de la clase “Derived”. Por ejemplo:

    C++
    Derived d;
    d.foo_int(); // llama a Foo<int>::foo()
    d.foo_double(); // llama a Foo<double>::foo()

Comments are closed.