Я немного новичок в более сложных функциях C++. Вчера я опубликовал следующий вопрос, и я узнал о виртуальном наследовании и страшном алмазе смерти.Confused on C++ Multiple Inheritance
Inheriting from both an interface and an implementation C++
Я также узнал, через другие ссылки, что множественное наследование обычно является признак плохого дизайна кода и что одни и те же результаты, как правило, могут быть лучше достигнуты без использования MI. Вопрос в том, что ... Я не знаю, что лучше, однонаправленный подход для следующей проблемы.
Я хочу определить интерфейс для двух типов цифровых точек. Входная цифровая точка и цифровая точка выхода. Интерфейс должен быть тонким, только для доступа к информации. Конечно, подавляющее большинство свойств являются общими для обоих типов цифровых точек. Поэтому для меня это явный случай Наследования, а не композиции.
Мои мои определения интерфейса выглядеть примерно так:
// Interface Definitions
class IDigitalPoint
{
public:
virtual void CommonDigitalMethod1() = 0;
};
class IDigitalInputPoint : virtual IDigitalPoint
{
public:
virtual void DigitialInputMethod1() = 0;
};
class IDigitalOutputPoint : virtual IDigitalPoint
{
public:
virtual void DigitialOutputMethod1() = 0;
};
И мои реализации выглядеть следующим образом:
// Implementation of IDigitalPoint
class DigitalPoint : virtual public IDigitalPoint
{
public:
void CommonDigitalMethod1();
void ExtraCommonDigitalMethod2();
}
// Implementation of IDigitalInputPoint
class DigitalInputPoint : public DigitalPoint, public IDigitalInputPoint
{
public:
void DigitialInputMethod1();
void ExtraDigitialInputMethod2();
}
// Implementation of IDigitalOutputPoint
class DigitalOutputPoint : public DigitalPoint, public IDigitalOutputPoint
{
public:
void DigitialOutputMethod1();
void ExtraDigitialOutputMethod2();
}
Так как я мог бы переформатировать эту структуру, чтобы избежать ИМ?
Заранее благодарим за помощь.
Поскольку 'IDigitalPoint' всегда фактически унаследован, я не вижу проблемы. Теперь, если вы должны были наследовать от двух последних классов, поскольку оба они наследуют практически не от «DigitalPoint», что было бы проблемой. Если это то, о чем вы просите, вам нужно уточнить это. PS: изучение C++ из хорошей книги всегда лучше, чем задавать вопросы на stackoverflow.com –
@Sam Вы правы. Множественное наследование не всегда плохое. Если OP хочет увидеть довольно хороший пример для хорошего множественного наследования, посмотрите главу политики в Alexandrescues Modern C++ Design. Но это только мое мнение. – Mehno
MI очень легко использовать. Но, пользуясь хорошо, это очень полезно. Большинство заявлений, которые я видел о плохой ИИИ, исходят от людей, которые, как правило, злоупотребляют им, а затем обвиняют инструмент в возникающих проблемах, а не за человека, владеющего им. – Peter