2011-09-06 12 views

Respuesta

1

No. Esto no es posible. Siempre entrará en conflicto con cualquiera de los fn().

La sintaxis de fn() son diferentes,

void fn(); // in A 

y en B es,

int fn(); // in B 

que tienen que hacer los mismos en la sintaxis y AB dejar C aplicar la fn(). Demo.

4

No hay manera en C para especificar que una de las implementaciones C::fn() sobrecargas A::fn() (y presumiblemente otros sobrecargas B::fn()). Lo que puede hacer, sin embargo, es introducir una clase intermedia cuales “ renombra ” las funciones, algo así como:

class RemapA : public A 
{ 
    virtual void fnInA() = 0; 
public: 
    virtual void fn() 
    { 
     fnInA(); 
    } 
}; 

class RemapB : public B 
{ 
    virtual int fnInB() = 0; 
public: 
    virtual int fn() 
    { 
     return fnInB(); 
    } 
}; 

class C : public RemapA, public RemapB 
{ 
    virtual void fnInA() { /* ... */ } 
    virtual void fnInB() { /* ... */ } 
    // ... 
}; 
Cuestiones relacionadas