基类的友元类,可以访问其派生类的私有虚函数

        我们知道一个基类的友元类,并不是其派生类的友元类 ,但是一个基类的友元类,可以访问其派生类的虚函数,而不受访问限制

        是不是觉得好神奇,哈哈!看看下面的代码:

#include  

class Base{
	friend class Test;	  //基类的友元类Test
	virtual 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;
}

你可能感兴趣的:(C++,c++,基类的友元类)