// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class Base {
public:
//ordinary member function
void setValue(int iValue){printf("Base::setValue(%d)\n",iValue);m_iValue=iValue; }
//virtual member function
virtual void dumpMe(){printf("Base::dumpMe()\n");}
virtual void foobar(){printf("Base::foobar()\n");}
protected:
int m_iValue;
};
class Derived:public Base{
public:
//ordinary member function
void setValue(int iValue){Base::setValue(iValue);}
//virtual member function
virtual void dumpMe(){printf("Derived::dumpMe()\n");}
virtual void foobar(){printf("Derived::foobar()\n");}
private:
double m_fValue;
};
typedef void (Base::*PVVBASEMEMFUNC)(void);
typedef void (Derived::*PVVDERIVEMEMFUNC)(void);
typedef void (Base::*PVIBASEMEMFUNC)(int);
typedef void (Derived::*PVIDERIVEMEMFUNC)(int);
int main(int argc, char* argv[])
{
PVIBASEMEMFUNC pVIBaseMemFunc = &Base::setValue;
PVIDERIVEMEMFUNC pVIDeriveMemFunc = static_cast<PVIDERIVEMEMFUNC>(pVIBaseMemFunc);
PVVBASEMEMFUNC pVVBaseMemFunc = &Base::foobar;
PVVDERIVEMEMFUNC pVVDeriveMemFunc = static_cast<PVVDERIVEMEMFUNC>(pVVBaseMemFunc);
Base baseObj;
(baseObj.*pVIBaseMemFunc)(10);
(baseObj.*pVVBaseMemFunc)();
Derived deriveObj;
(deriveObj.*pVIDeriveMemFunc)(20);
(deriveObj.*pVVDeriveMemFunc)();
return 0;
}
/*
Base::setValue(10)
Base::foobar()
Base::setValue(20)
Derived::foobar()
Press any key to continue
*/
(deriveObj.*pVIDeriveMemFunc)(20);
最新推荐文章于 2021-08-13 15:24:40 发布