Скажем, у меня есть этот код:
class foo{
protected:
int a;
};
class bar : public foo {
public:
void copy_a_from_foo(foo& o){
a = o.a; // Error
}
void copy_a_from_bar(bar& o){
a = o.a; // OK
}
};
int main(){
bar x;
foo y;
bar z;
x.copy_a_from_foo(y);
x.copy_a_from_bar(z);
}
здесь class bar
не имеет проблем с доступом к защищенному члену a
из другого экземпляра того же класса, но когда я пытаюсь сделать то же самое с экземпляром базового класса foo
, компилятор дает мне ошибку говоря, что a
защищен. Что стандарт должен сказать об этом?
ошибка
prog.cpp: In member function 'void bar::copy_a_from_foo(foo&)':
prog.cpp:3:7: error: 'int foo::a' is protected
int a;
^
prog.cpp:9:11: error: within this context
a = o.a;
PS: Я рассмотрел этот вопрос, но это не совсем то же самое: я пытаюсь получить доступ к защищенному члену из производного класса.