Предположим, у меня есть класс OS, который объявляет только интерфейс операционной системы.
Код: Выделить всё
struct OS {
virtual int read();
virtual int write();
virtual int open();
virtual int close();
/* ... a lot of methods */
};
Для этого интерфейса также существует расширение с дополнительными методами
Код: Выделить всё
struct OS_with_socks: OS {
virtual int socket();
virtual int bind();
virtual int listen();
/* ... a lot of other methods */
};
Кроме того, у меня есть класс act_OS, который определяет read() как ::read, write как ::write() и т.д. act_OS является производным от OS. Теперь я хочу определить класс actual_OS_with_socks, который делает то же самое, но для расширенного интерфейса ОС. Как правильно это сделать? Вот так?
Код: Выделить всё
struct actual_OS_with_socks: OS_with_socks, actual_OS {
/* implementation of methods socket, listen, bind, e.t.c */
}
Это хорошая практика? Можно ли избежать двойного наследования, сохраняя при этом разделение базового интерфейса POSIX и интерфейса сокета? Это правильный способ сделать это?
(Мне нужна оболочка ОС для целей тестирования)
Подробнее здесь:
https://stackoverflow.com/questions/793 ... und-the-os