Сразу прошу прощения если этот вопрос уже задавался.
Объявляем интерфейс 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'
Хочется от него избавиться. Делегирование не предлагать
Здравствуйте, Small, Вы писали:
S>На все это счастие .NET 2003 выдает предупреждение:
S>warning C4250: 'B' : inherits 'A::A::f' via dominance see declaration of 'A::f'
S>Хочется от него избавиться. Делегирование не предлагать
#pragma warning ( disable : 4250 )
Здравствуйте, Small, Вы писали:
S>На все это счастие .NET 2003 выдает предупреждение:
S>warning C4250: 'B' : inherits 'A::A::f' via dominance see declaration of 'A::f'
S>Хочется от него избавиться. Делегирование не предлагать
VC++ склонен к тому чтобы засыпать юзера варнингами, но варнинги это не ошибки, если знаешь что делаешь, то забудь о них.
Так не пойдет ?
class B : public IB, public A
{
public:
virtual void g()
{
printf("B::g");
}
virtual void f()
{
A::f();
}
};
Здравствуйте, co, Вы писали:
co>Так не пойдет ?
co>
co>class B : public IB, public A
co>{
co>public:
co> virtual void g()
co> {
co> printf("B::g");
co> }
co> virtual void f()
co> {
co> A::f();
co> }
co>};
co>
Принципиально не отличается в этом случае от делигирования. У меня много методов и это крайне не удобно