Допустим, у меня есть базовый класс с защищаемого элемента:доступ к защищенным членам существующего базового объекта
class Base
{
public:
Base(int data)
: m_attribute(data) {}
protected:
int m_attribute;
};
и производный класс из базы:
class Derived : public Base
{
public:
int get_attribute()
{
return m_attribute;
}
};
Прежде всего: я могу это сделать , правильно? Является ли это полностью законным?
Если да, то вот вопрос:
- Я ничего не могу в классе Base изменить;
- У меня есть объект класса Base, и мне нужно получить доступ к его члену m_attribute;
Должен ли я сначала отключить этот объект базового класса до производного класса, а затем вызвать функцию get_attribute()? Что-то вроде этого:
Base base(5);
Derived* derived = static_cast < Derived*>(&base);
int base_attribute = derived->get_attribute();
Или какие другие способы доступа к защищенному члену? Я знаю, что функция друга является опцией, но я не могу ничего изменить в базовом классе
Первого вопрос: Да, вы можете, чтобы ваши мечты сбылись – Treycos
статичные литое ничего не делают – Treycos
Возможной дубликаты [Почему я не могу получить доступ к защищенный член из экземпляра производного класса?] (http://stackoverflow.com/questions/967352/why-cant-i-access-a-protected-member-from-an-instance-of-a-der ived-class) –