Доступ к частным членам в наследство
У меня есть класс A, который имеет поле val, объявленное как private.
Я хочу объявить класс B, который наследует от A и имеет доступ к val.
Есть ли способ сделать это на С++?
Я хочу сделать это, потому что мне нужно перегрузить некоторые функции A, не изменяя код вообще.
Спасибо.
Ответы
Ответ 1
Быстрый ответ: нет. То, что означает ключевое слово protected
, которое вы хотите использовать, если вы хотите предоставить доступ к подклассам, но никому другому.
private
означает, что никто не имеет доступа к этим переменным, даже подклассам.
Если вы вообще не можете изменить код в A
, возможно, существует метод доступа public
/protected
для этой переменной. В противном случае эти переменные не предназначены для доступа из подклассов, и только хаки могут помочь (что я не поощряю!).
Ответ 2
Частным членам базового класса могут быть доступны только функции базового члена (не производные классы). Таким образом, у вас нет прав, даже шансов сделать это:)
class Base
- общедоступный: любой пользователь может получить доступ
- private: доступ к ним возможен только с помощью функций базового члена (не
производные классы)
- protected: можно получить доступ как к функциям базового члена, так и к производным
классы
Ответ 3
Хорошо, если у вас есть доступ к базовому классу, вы можете объявить класс B как класс друга. Но, как другие объяснили это: потому что вы можете, это не значит, что это хорошая идея. Используйте защищенные члены, если вы хотите, чтобы производные классы имели доступ к ним.
Ответ 4
Это выполнимо, как описано в этом Гуру недели - GotW # 76 - Использование и злоупотребления правами доступа. Но это следует рассматривать как последнее средство.
Ответ 5
Вам нужно определить его как protected
. Защищенные члены наследуются к дочерним классам, но недоступны из внешнего мира.