Вы, вероятно, знаете это, но с наследованием вы можете иметь открытый, защищенный и закрытый доступ к членам.
Если член является закрытым в базовом классе, производный не может получить к нему доступ, тогда как если тот же член защищен, то производный класс может получить к нему доступ (хотя он все еще не является общедоступным, поэтому вы поддерживаете инкапсуляцию) .
Нет способа помешать определенным функциям видеть то, что доступно в их области (хотя это то, о чем вы спрашиваете), но вы можете спроектировать свой базовый класс так, чтобы производные классы могли получать доступ только к определенным его элементам. .
Это может быть полезно, поскольку класс B может наследовать от класса A как защищенный (таким образом получая свои защищенные члены), в то время как класс C может наследовать от того же класса A, что и public (таким образом, не получая доступ к своим защищенным членам). Это позволит вам по крайней мере получить некоторую форму различий в доступности вызовов - хотя между классами, а не между функциями в одном классе.