Russian Qt Forum

Программирование => С/C++ => Тема начата: Racheengel от Сентябрь 21, 2016, 20:46



Название: "проблема ромба"
Отправлено: Racheengel от Сентябрь 21, 2016, 20:46
Не раз слышал мнения, что проблема ромба при множественном наследовании - надуманная и в принципе нет никаких ограничений на ее решение, введя правило, по которому первый наследник всегда побеждает. Ну т.е. при

class A
{
virtual void f1();
}

class B: public A
{
virtual void f1();
}

class C: public B
{
virtual void f1();
}

class D: public B, public C
{
virtual void f1(); // B::f1() wins
}

Лично мое имхо - "ромб" - это следствие плохой архитектуры... А вы шо скажете? :)


Название: Re: "проблема ромба"
Отправлено: gil9red от Сентябрь 21, 2016, 21:09
Не нужно мудрить, имхо :)
В java вообще убрали множественное наследование, хотя есть возможность реализовываться от множества интерфейсов :)


Название: Re: "проблема ромба"
Отправлено: Igors от Сентябрь 22, 2016, 08:03
В java вообще убрали множественное наследование
С каких это пор жаба стала авторитетом?

Лично мое имхо - "ромб" - это следствие плохой архитектуры...
Не исключено. Если 2 и более базовых класса имеют методы с одинаковыми именами - это должно насторожить


Название: Re: "проблема ромба"
Отправлено: Akon от Сентябрь 22, 2016, 11:27
Какие проблемы? Если при вызове неоднозначность выбора метода - компилятор скажет, выбрать конкретный метод можно с помощью квалифицированного вызова, ну и  в наследнике можно явно перекрыть виртуальный метод для выбора базовой реализации.

Другое дело, когда один и тот же метод несет разный смысл. Таких ситуаций нужно избегать.


Название: Re: "проблема ромба"
Отправлено: Bepec от Сентябрь 22, 2016, 12:00
Наглядный пример выстрела в ногу. Если мозга нет, можно и шею свернуть :D