// CallBackFunc.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <list>
#include <iostream>
using namespace std;
class TestA
{
public:
typedef void (TestA::*FuncPtr) ();
TestA()
{
m_listFuncs.push_back(&TestA::Func1);
m_listFuncs.push_back(&TestA::Func3);
m_listFuncs.push_back(&TestA::Func2);
}
void Func1()
{
cout << "这个是Func1" << endl;
}
void Func2()
{
cout << "这个是Func2" << endl;
Func3();
}
virtual void Func3()
{
cout << "这个是Func3" << endl;
}
void Exe()
{
while(m_listFuncs.size() > 0)
{
FuncPtr pFunc = m_listFuncs.front();
((*this).*pFunc)();
m_listFuncs.pop_front();
}
}
private:
std::list<FuncPtr> m_listFuncs;
};
class TestB : public TestA
{
public:
virtual void Func3()
{
cout << "TestB::Func3" << endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
TestA * pTemp = new TestB;
pTemp->Exe();
system("pause");
return 0;
}
执行结果:
函数指针指向的函数仍然遵循多态规则