函数指针实现多态

来源:互联网 发布:iphone6s蜂窝移动数据 编辑:程序博客网 时间:2024/06/05 20:05
#include<iostream>using namespace std;class CFather;//前向声明typedef void (CFather::*PFUN_FATHER)();//定义一个  父类成员函数指针class CFather{ public:  PFUN_FATHER *v_ptr;//指向表的指针  static PFUN_FATHER v_table[];//虚函数列表  在创建对象前就存在   为静态  public :   CFather():v_ptr(CFather::v_table)//构造函数   给指针赋值  只想自己的表 { }  public :   void AA()//virtual {  cout<<"CFather::AA"<<endl; } void BB()//virtual {  cout<<"CFather::BB"<<endl; } void CC()//virtual {  cout<<"CFather::CC"<<endl; }};PFUN_FATHER CFather::v_table[]={&CFather::AA,&CFather::BB,&CFather::CC};//静态函数在类外初始化 class CSon:public CFather//公有继承{ public :  static PFUN_FATHER v_table[];//CSon   要有自己的  虚函数列表 public:  CSon() {  v_ptr=CSon::v_table;//构造函数   指针赋值   只想自己的表 } public: void AA()//virtual {  cout<<"CSon::AA"<<endl; } void BB()//virtual {  cout<<"CSon::BB"<<endl; } void DD()//virtual {  cout<<"CSon::DD"<<endl; }};PFUN_FATHER CSon::v_table[]={(PFUN_FATHER)&CSon::AA,(PFUN_FATHER)&CSon::BB,(PFUN_FATHER)&CFather::CC,(PFUN_FATHER)&CSon::DD};//注意要将子类函数要覆盖的   进行  强制类型转换   否则无法用父类指针调用函数 //  父类的虚函数要继承下来  void main(){ CFather *fa=new CSon;//定义对象    指针指向表 (fa->*(fa->v_ptr[2]))();//  使用成员函数  要用对象  调用成员函数指针 CFather fb; (fb.*(fb.v_ptr[2]))(); system("pause");}


 

0 0
原创粉丝点击