类的成员函数指针

一个类的成员函数指针使用前,必须添加一个类的对象。

普通类的成员函数指针建立:

返回值 (类名::指针名)(函数参数)=void (A::*pt)(int,bool);

书中建议:

1)要在特定类的对象中调用成员函数指针

2)尽量利用typedef简化成员函数指针的声明

3)尽量不用成员函数指针

 

初级实例代码一:使用对象来调用类的成员函数指针

#include <iostream>
using namespace std;
class A
{
public:
   void set(int x,int y){i=x,j=y;}
   int get(){return i*j;}
private:
    int i;
    int j;
};

typedef void (A::*pt)(int ,int );//建立成员函数指针

void main()
{
    pt p;//创建一个A类的函数指针p
    A a; //创建一个A类的对象a
    p=&A::set;//成员函数指针取函数地址
    (a.*p)(10,20);//如何调用成员函数指针
    cout<<a.get()<<endl;
    system("pause");
}

 

 

初级实例代码二:使用指针来调用类的成员函数指针

#include <iostream>
using namespace std;

class A
{
public:
    virtual void s1()=0;
    virtual void s2()=0;
};

class B:public A
{
public:
    virtual void s1(){cout<<"我是B类的s1\n";}
    virtual void s2(){cout<<"我是B类的s2\n";}
};
 
class C:public B
{
public:
    virtual void s1(){cout<<"我是C类的s1\n";}
    virtual void s2(){cout<<"我是C类的s2\n";}
};

void main()
{
    void (A::*pt)()=0;    //成员函数指针pt,该指针指向抽象类A的成员函数
    A *p=0;                //建立一个类A的指针p并且将内存地址赋值为0
    p=new B;            //创建B,让p指向它
    pt=&A::s1;            //成员函数指针pt,取类A的s1函数的内存地址
    (p->*pt)();            //通过指针p来访问对象,通过pt来访问该对象的成员函数
    delete p;
    system("pause");
}

 

初级实例代码三:使用指针来调用类的成员函数指针数组

#include <iostream>
using namespace std;

class A
{
public:
    virtual void s1()=0;
    virtual void s2()=0;
};

class B:public A
{
public:
    virtual void s1(){cout<<"我是B类的s1\n";}
    virtual void s2(){cout<<"我是B类的s2\n";}
};

class C:public B
{
public:
    virtual void s1(){cout<<"我是C类的s1\n";}
    virtual void s2(){cout<<"我是C类的s2\n";}
};

void main()
{
    typedef void (A::*pt)();
    pt pp[2]={&A::s1,&A::s2};
    A *p1=new B;
    A *p2=new C;

    int i=0;
    for(i=0;i<2;i++)
    {
        (p1->*pp[i])();
        (p2->*pp[i])();
    }
    delete p1;
    delete p2;

    system("pause");
}

 

posted on 2015-03-30 15:08  小咒  阅读(242)  评论(0编辑  收藏  举报

导航