LINUX.ORG.RU

защищенная наследовательность


0

0

кто может подсказать почему помеченная звездочкой строка не компилируется? Ведь в принципе все что было protected в классе А, должно быть видно main.cpp:36: within this context в классе В. Как факт, первый конструктор работает.
class A{
protected:
int a;
public:
A(){a=1;}
};
class B: public A{
protected:
int b;
public:
B():A(){b=a+1;} // works
//(*) B(const A& aa):A(){b=aa.a+10;} //compiling error: A::a is // protected within this context
};

anonymous

Да потому, что ты пытаешься обратиться к члену объекта аа, который является по сути внешним для класса B и напрямую изменить его protected данные. при наследовании у тебя в класс всего лишь _добавляются_ элементы базового класса с разными спецификаторами доступа. И это совсем не значит, что ты можешь жонглировать с закрытыми данными базовых классов, как таковых.

Перечитай сам механизм наследования. Станет понятнее.

der_steppen_wolf
()

Нужно так: B(const A& aa):A(){b=((const B&)aa).a+10;}

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.