#include "stdafx.h" #include <iostream> //int FunA(int& refInt)//call back function //{ // std::cout<<refInt<<std::endl; // return 0; //} //typedef int(*CallBack) (int& ref);//define CallBack as the function pointer int (*pFun) (int& ref);//pFun points to the function which inputs int& and outputs int // // //void FunB(CallBack funCB, int& refInt)//this function calls callback function FunA //{ // funCB(refInt);//call FunA to do sth. //} class Line { public: Line(){} virtual ~Line(){} typedef void(*CallBack) (char *pChar); void DrawLine(char *pInChar, CallBack callFun) { std::cout<<"Line is ready to draw!"<<std::endl; callFun(pInChar); } }; class Canvas { public: Canvas():m_pChar(""){} virtual ~Canvas(){} typedef void(*CallBack) (char *pChar); static void DoDrawLine(char *pChar) { std::cout<<"Canvas is drawing!"<<std::endl; std::cout<<pChar<<std::endl; } void SetCallBack() { CallBack cbFun; cbFun = DoDrawLine; m_line.DrawLine(m_pChar, cbFun); } public: char *m_pChar; Line m_line; }; int _tmain(int argc, _TCHAR* argv[]) { //int iNum = 5; //CallBack funCallBack; //funCallBack = FunA; //FunB(funCallBack, iNum);//inform funCallBack function to do sth. Canvas& refCvs = Canvas(); refCvs.m_pChar = "Hello!"; refCvs.SetCallBack(); return 0; }