当我在Sub::f()
并尝试访问Base* b
指针指向的另一个子类的受保护成员时,它将不会编译,直到Sub
是Base的一位朋友。为什么我需要这样做?为什么需要成为访问受保护成员的朋友?
class Base{
//friend class Sub;
protected:
int i;
virtual void f() = 0;
};
class Sub : public Base{
Base* b;
public:
Sub(Base* ba) : b(ba){}
void f(){
b->f();
cout << b->i << endl;
}
};
因为这friend'是什么'的。 – Maroun
,因为你只能让你的朋友触摸你的私人部分。 –
@ user2310289 LOL – Maroun