8_22.cpp

来自「C++语言程序设计案例教程,郑莉编的书」· C++ 代码 · 共 18 行

CPP
18
字号
#include <iostream> 
using namespace std;
class Base;           //类Base的前置说明,满足下面定义语句的需要
void (Base::*pfm)();   //定义全局的void (Base::*)()型的指向成员函数的指针pfm
class Base	
{ 	virtual  void f()=0;	           //私有属性的纯虚函数f
public:
	static void set(){pfm=&Base::f;}// 成员函数指针pfm指向私有的虚成员函数
};
class Derived:public Base{ 	void f(){cout<<"Derived::f();\n";}	};       
int main()
{	Derived objd;                    	//定义派生类对象objd
	Base*pobjb=&objd;             	//派生类对象地址向上映射到基对象指针
	Base::set();                    	//调用静态成员函数,得到pfm=&Base::f;
   	(pobjb->*pfm)();              	//等价于pObjb->f();
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?