быть полезным, это не так. Как говорит Rakete1111, вы сосредотачиваетесь на том аспекте, который OP вообще не заботился.
е знаем членов, указанныхprotected
из базового класса можно получить доступ только из собственного экземпляра производного класса. Это особенность стандарта, и она неоднократно обсуждалась при переполнении стека:
Но кажется возможным обойти это ограничение с помощью указателей на членов, как пользователь chtzпоказал мне:
struct Base { protected: int value; };
struct Derived : Base
{
void f(Base const& other)
{
//int n = other.value; // error: 'int Base::value' is protected within this context
int n = other.*(&Derived::value); // ok??? why?
(void) n;
}
};
Почему это возможно, это желаемая функция или сбой в реализации или формулировке Стандарта?
Из комментариев возник еще один вопрос:еслиDerived::f
называется с фактическимBase
это неопределенное поведение?