B имеет доступ только к самим защищенным полям или другим объектам типа B (или, возможно, полученным из B, если он видит их как B-s).
B не имеет доступа к защищенным полям любых других не связанных объектов в том же дереве наследования.
Яблоко не имеет права доступа к внутренностям апельсина, даже если они оба фруктовые.
class Fruit
{
protected: int sweetness;
};
class Apple: public Fruit
{
public: Apple() { this->sweetness = 100; }
};
class Orange: public Fruit
{
public:
void evil_function(Fruit& f)
{
f.sweetness = -100; //doesn't compile!!
}
};
int main()
{
Apple apple;
Orange orange;
orange.evil_function(apple);
}