Я хотел бы понять, почему, когда я вызываю защищенный метод, объявленный и реализованный в базовом классе, из производного класса через указатель на базовый класс, я получаю ошибку компиляции (C2248) и когда я вызываю его из производного класса через указатель на производный классэкземпляр, этап компиляции.
Я понимаю, что это часть языка, но я хочу понять, почему
Мое объяснение состоит в том, что когда я вызываю защищенный член базового класса через указатель на базовый класс вВ производном классе компиляция завершается неудачно, потому что наследование базового класса может быть защищенным или закрытым, но когда я вызываю его через указатель на производный класс в производном классе, это нормально, потому что он является частью класса.Это правильно?
например
class Base
{
protected:
virtual void func() {}
}
class Derived : public Base
{
public:
virtual void myMethod()
{
Base* pBase = new Base;
pBase->func(); -> compilation error (C2248)
Derived* pDerived = new Derived;
pDerived->func(); -> O.K
}
}