Можно ли «отменить» элемент в наследовании C ++? Что делать, если нет? - PullRequest
1 голос
/ 19 октября 2019

Если я хочу унаследовать от «BaseClass», но мне нужно управлять одним из закрытых членов, могу ли я «отнять» у него что-то вроде этого:

using BaseClass::private_member;

Если нет, что делатькогда некоторые члены НЕ помечены как protected как должно быть? Если это невозможно, это значит, что мы не должны наследовать от классов, которые мы не разработали?

1 Ответ

1 голос
/ 19 октября 2019

Если я хочу унаследовать от «BaseClass», но мне нужно управлять одним из закрытых членов, могу ли я «отнять» у него что-то вроде этого?

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

Если нет, что делать, если некоторые члены НЕ помечены как защищенные, как должно быть?

Сначала проверьте это предположение. Должен ли член быть помечен как защищенный или вы пытаетесь неправильно использовать базовый класс? Если член действительно должен быть помечен как защищенный, то нужно исправить базовый класс. Подайте отчет об ошибке, если базовый класс не находится под вашим контролем.

Если это невозможно, это означает, что мы не должны наследовать от классов, которые мы не разрабатывали?

Нет, это означает, что вы не должны опираться на порочный фундамент. (Или, возможно, это означает, что вы должны работать с дизайном базового класса, а не против него.) Существует множество хорошо реализованных базовых классов. Используйте подходящий инструмент для работы под рукой.

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