2011-09-06 5 views

Odpowiedz

1

Nie. To jest niemożliwe. Zawsze będzie kolidować z jednym z fn().

Składnia fn() są różne,

void fn(); // in A 

aw B jest

int fn(); // in B 

Trzeba by te samą składnię w A i B pozwolić C wdrożyć fn(). Demo.

4

Nie ma mowy w C aby określić, że jeden z C::fn() wdrożeń przeciąża A::fn() (i prawdopodobnie kolejne przeciążenia B::fn()). Co można zrobić, jest jednak wprowadzenie pośredniego klasę która “ zmienia nazwę ” funkcje, coś takiego:

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() { /* ... */ } 
    // ... 
};