头文件: class CObserver { public: void Action(int i) { cout<<"object has change to "<<i<<endl; } }; class CObserveAgent { public: void AddObserver(CObserver &observer); void DelObserver(CObserver &observer); void NotifyAll(int i); private: std::list<CObserver*> m_observerList; }; class Cobjection { public: Cobjection() { m_pAgent = NULL; } int Square(int iNum) { int iRet = iNum * iNum; if (m_pAgent) { m_pAgent->NotifyAll(iRet); } return iRet; } void AddObserverAgent(CObserveAgent &agent) { m_pAgent = &agent; } private: CObserveAgent* m_pAgent; }; cpp文件: void CObserveAgent::AddObserver( CObserver &observer ) { m_observerList.push_back(&observer); } void CObserveAgent::DelObserver( CObserver &observer ) { m_observerList.erase( remove(m_observerList.begin(),m_observerList.end(),&observer), m_observerList.end()); } void CObserveAgent::NotifyAll( int i ) { for( list<CObserver*>::iterator it=m_observerList.begin(); it!=m_observerList.end(); ++it) { (*it)->Action(i); } } 主函数: int _tmain(int argc, _TCHAR* argv[]) { CObserver observer; CObserveAgent agent; Cobjection obj; agent.AddObserver(observer); obj.AddObserverAgent(agent); obj.Square(7); } 以上代码均参考自:http://tech.ddvip.com/2008-10/122334239274310.html http://www.cnblogs.com/kebixisimba/archive/2007/06/07/774837.html