當我在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