наследование от листовых классов - PullRequest
0 голосов
/ 27 февраля 2011

Руководство по проектированию классов, которое можно найти в книге по стандартам кодирования Саттера и Александреску, помимо прочего, состоит в том, чтобы сделать базовые классы абстрактными, чтобы их нельзя было создать.Это необходимо для предотвращения среза и проблем с полиморфным присваиванием и копированием.

Однако при использовании библиотеки классов, такой как, например, Qt, обычной практикой является наследование от классов concrdete из библиотеки для добавления дополнительного поведения.Например, можно создать класс MyListBox, который наследуется от QListBox, добавив специфичное для приложения поведение для всех списков в моем приложении.

Как эту обычную практику можно совместить с рекомендацией иметь неинстанцируемые базовые классы?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2011

Эту рекомендацию можно применять только к базовым классам, создавать ее не следует (обычно потому, что это не имеет смысла). Это не так в вашем примере: например, только то, что вы унаследовали от QDialog, не означает, что вы не захотите использовать простые старые QDialog s в других местах кода.

2 голосов
/ 27 февраля 2011

Ваше первое предложение содержит ответ, который вы ищете:

Дизайн класса Руководство найдено в книге Саттера и Александреску по стандартам кодирования

(выделено мое).

Это всего лишь руководство, а не правило, высеченное в камне.

Если у вас есть определенные технические ограничения, например, в используемой вами библиотеке, вы можете игнорировать ее, если данная альтернатива в данный конкретный момент намного хуже (например, необходимость использовать какой-то шаблон, который утроит общий объем кода или необходимость переписать библиотеку).

Весь смысл моего ответа: все эти шаблоны, рекомендации и лучшие практики - это средства, с помощью которых вы можете достичь своей цели программирования. Они сами не являются целью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...