我们知道一个基类的友元类,并不是其派生类的友元类 ,但是一个基类的友元类,可以访问其派生类的虚函数,而不受访问限制
#include <iostream> class Base{friend class Test; //基类的友元类Testvirtual void f() = 0; //虚函数
public:virtual ~Base() { } //虚析构
};class Derived:public Base{virtual void f(){ std::cout << "class Derived"; }
};class Test{Base* bp;
public:Test(Base* bp):bp(bp) { }~Test(){ delete bp; }void f(){ bp->f(); } //Test类只是基类友元类//通过基类指针访问派生类的虚函数,不受访问限制
};int main()
{ Test t( new Derived() ); t.f();return 0;
}