Ромбовидное наследование
От: Small  
Дата: 18.12.03 08:30
Оценка:
Сразу прошу прощения если этот вопрос уже задавался.

Объявляем интерфейс IA
class IA
{
public:
    virtual void f() = 0;
};


Объявляем расширенную версию интерфейса IA — интерфейс IB
class IB : public virtual IA
{
public:
    virtual void g() = 0;
};


Реализуем в классе A интерфейс IA
class A : public virtual IA
{
public:
    virtual void f()
    {
        printf("A::f");
    }
};


А теперь хотим реализовать интерфейс IB в классе B, воспользовавшись уже имеющейся реализацией f из A
class B : public IB, public A
{
public:
    virtual void g()
    {
        printf("B::g");
    }
};



На все это счастие .NET 2003 выдает предупреждение:
warning C4250: 'B' : inherits 'A::A::f' via dominance see declaration of 'A::f'

Хочется от него избавиться. Делегирование не предлагать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.