类成员函数指针的语法

/*类成员函数指针的语法*/


/*****************************
.h文件************************************/

#if !defined(AFX_ONLYOBJ_H__BABA5522_94E8_4F53_B979_27F3DD105320__INCLUDED_)
#define AFX_ONLYOBJ_H__BABA5522_94E8_4F53_B979_27F3DD105320__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class COnlyObj 
{
private:
    int m_nTemp;
public:
    COnlyObj(int nTemp);
    ~COnlyObj();
public:
    void ShowDate(void);
};

//
声明类成员 函数指针类型
//
把函数声明抄过来 void ShowDate(void);
//
在前面加上 typedef void ShowDate(void);
//
改一下函数名字并加上'*',在函数名两边加上'()', typedef void (*TYPE_pfn_ShowDate)(void);
//
再加上作用域就完成了

typedef void (COnlyObj::*TYPE_pfn_ShowDate)(void);

//声明静态成员函数指针跟普通函数指针的定义一样
typedef void (*TYPE_pfn_StaticShowDate)(void);


#endif // !defined(AFX_ONLYOBJ_H__BABA5522_94E8_4F53_B979_27F3DD105320__INCLUDED_)

 

/*******************类的cpp文件****************************************/
#include "stdafx.h"
#include "OnlyObj.h"
#include <iostream.h>

COnlyObj::COnlyObj(int nTemp)
{
    m_nTemp = nTemp;
}

COnlyObj::~COnlyObj()
{
}

void COnlyObj::ShowDate(void)
{
    cout << m_nTemp << endl;
}

void COnlyObj::StaticShowDate(void)
{
    cout << "
静态成员函数,没有this指针!!!" << endl;
}

/*******************************程序主文件*****************************/

#include "stdafx.h"
#include "OnlyObj.h"

int main(int argc, char* argv[])
{
    //
定义一个类对象
    COnlyObj theOnlyObj(20);
    //
再定义一个类指针对象
    COnlyObj *ptheOnlyObj = new COnlyObj(30);
    //
定义一个成员函数指针类型,注意后来要加上作用域并不能加'()'
    TYPE_pfn_ShowDate pfnShowData = COnlyObj::ShowDate;
   
    //
成员函数指针的调用
    //theOnlyObj.*
这段可以理解为调用成员函数所需的this指针
    (theOnlyObj.*pfnShowData)();

    //
成员函数指针的调用
    //ptheOnlyObj->*
这段可以理解为调用成员函数所需的this指针
    (ptheOnlyObj->*pfnShowData)();

  //定义一个静态成员函数指针类型   
  TYPE_pfn_StaticShowDate pfnStaticShowDate = COnlyObj::StaticShowDate;
  //
直接调用,不用加this指针,跟普通函数指针的调用差不多
  pfnStaticShowDate();

    return 0;
}

原文地址:https://www.cnblogs.com/w413133157/p/1654831.html