Подтвердить что ты не робот

Доступ к частным членам в наследство

У меня есть класс A, который имеет поле val, объявленное как private. Я хочу объявить класс B, который наследует от A и имеет доступ к val. Есть ли способ сделать это на С++?

Я хочу сделать это, потому что мне нужно перегрузить некоторые функции A, не изменяя код вообще.

Спасибо.

4b9b3361

Ответ 1

Быстрый ответ: нет. То, что означает ключевое слово protected, которое вы хотите использовать, если вы хотите предоставить доступ к подклассам, но никому другому.

private означает, что никто не имеет доступа к этим переменным, даже подклассам.

Если вы вообще не можете изменить код в A, возможно, существует метод доступа public/protected для этой переменной. В противном случае эти переменные не предназначены для доступа из подклассов, и только хаки могут помочь (что я не поощряю!).

Ответ 2

Частным членам базового класса могут быть доступны только функции базового члена (не производные классы). Таким образом, у вас нет прав, даже шансов сделать это:)

class Base

  • общедоступный: любой пользователь может получить доступ
  • private: доступ к ним возможен только с помощью функций базового члена (не производные классы)
  • protected: можно получить доступ как к функциям базового члена, так и к производным классы

Ответ 3

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

Ответ 5

Вам нужно определить его как protected. Защищенные члены наследуются к дочерним классам, но недоступны из внешнего мира.