Tengo clase C++ con múltiples padres; cada padre define una función con un nombre común, pero con un propósito diferente:Anulación de métodos virtuales calificados
class BaseA
{
virtual void myFunc(); // does some task
};
class BaseB
{
virtual void myFunc(); // does some other task
};
class Derived : public BaseA, public BaseB;
Si eso fue todo, yo no tendría ningún problema - que podía resolver la ambigüedad con un usando declaración, y pude elegir qué uno para llamar usando los nombres de las clases base y el operador de resolución del alcance.
Por desgracia, la clase derivada tiene que reemplazar a los dos:
class Derived : public BaseA, public BaseB
{
virtual void BaseA::myFunc(); // Derived needs to change the way both tasks are done
virtual void BaseB::myFunc();
}
Esto no funciona, no porque se introduce una nueva ambigüedad (aunque puede), sino porque
" error C3240: 'myFunc': debe ser una función miembro no sobrecargada de 'BaseA' "
" error C2838: nombre calificado ilegal en la declaración de miembro "
Bajo circunstancias diferentes, podría simplemente cambiar el nombre de los métodos, o hacerlos puros virtuales como sugiere el compilador. Sin embargo, la estructura jerárquica de clase y una serie de problemas externos hacen que la primera opción sea extremadamente difícil y la segunda imposible.
¿Alguien tiene alguna sugerencia? ¿Por qué los calificadores solo están permitidos para métodos virtuales puros? ¿Hay alguna manera de anular simultáneamente los métodos virtuales y resolver ambigüedades?
También podría anular los comportamientos en clases separadas: 'DerivedA: public BaseA',' DerivedB: public BaseB', y luego 'Derived: public DerivedA, public DerivedB'. Esto no resuelve el problema de ambigüedad, aunque – Cameron