Я удивлен, что код ниже компилируется.
Кажется, что класс, подружившийся с (наследуемым) базовым классом, может получить доступ к члену базового класса, предоставленному экземпляром производного класса.
Если наследование изменено на private
, компиляция завершится неудачно.
Короче говоря, как d.b_var
действует в пределах F::func(D& d)
?
#include <iostream>
#include <string>
using namespace std;
class B{
int b_var;
friend class F;
};
class D: public B{
int d_var;
};
class F{
public:
void func(D &d){
d.b_var = 5;
}
};
int main()
{
cout<<"fine";
}