Вот пример кода, который меня раздражает:Как получить доступ к защищенному методу в базовом классе из производного класса?
class Base {
protected:
virtual void foo() = 0;
};
class Derived : public Base {
private:
Base *b; /* Initialized by constructor, not shown here
Intended to store a pointer on an instance of any derived class of Base */
protected:
virtual void foo() { /* Some implementation */ };
virtual void foo2() {
this->b->foo(); /* Compilator sets an error: 'virtual void Base::foo() is protected' */
}
};
Как получить доступ к защищенной перекрытой функции?
Благодарим за помощь. : o)
Я не думаю, что ваша реализация совершенно правильная. Почему у вас есть экземпляр Base в качестве переменной-члена? this-> b-> foo() будет пытаться вызвать чистый виртуальный метод. – GWW
Эта программа не должна компилироваться. Вы не можете создать экземпляр абстрактного класса ... Если 'b' указывает на экземпляр какого-либо другого класса, полученного из' Base'. – 341008
Я опустил точность: атрибут Derived :: b предназначен для хранения любого экземпляра производных классов из Base –