C++中经常使用基类和派生对象多态的特性实现一些数据的传输,基类为纯虚类的接口类,派生类继承接口类。以下实现了一个典型的多态实例,该实例可以应用在软件开发中两个类的数据传输中。下面直接上代码:
#includeusing namespace std; class ICRtpListen { private: public: ICRtpListen(); ~ICRtpListen(); int firstFunction0(); virtual int onConnect() = 0; virtual int onDataIn() = 0; }; ICRtpListen::ICRtpListen() { printf("ICRtpListenn"); } ICRtpListen::~ICRtpListen() { printf("~ICRtpListenn"); } class CRtpServer1: public ICRtpListen { private: public: CRtpServer1(); CRtpServer1(ICRtpListen *pbaseObj); ~CRtpServer1(); int firstFunction1(); virtual int onConnect(); virtual int onDataIn(); public: ICRtpListen *pbaseRtpObj; // 一个基类指针成员 }; CRtpServer1::CRtpServer1() { printf("CRtpServer1n"); } CRtpServer1::CRtpServer1(ICRtpListen *pbaseObj) { pbaseRtpObj = pbaseObj; // 保存基类指针 printf("CRtpServer1n"); } CRtpServer1::~CRtpServer1() { printf("~CRtpServer1n"); } int CRtpServer1::onConnect() { pbaseRtpObj->onConnect(); printf("CRtpServer1 onConnect inn"); return 0; } int CRtpServer1::onDataIn() { pbaseRtpObj->onDataIn(); printf("CRtpServer1 cb data coming in...n"); return 0; } class CProcessServer2: public ICRtpListen { private: public: CProcessServer2(); ~CProcessServer2(); int firstFunction1(); virtual int onConnect(); virtual int onDataIn(); }; CProcessServer2::CProcessServer2() { printf("CProcessServer2n"); } CProcessServer2::~CProcessServer2() { printf("~CProcessServer2n"); } int CProcessServer2::onConnect() { printf("CProcessServer2 onConnectn"); } int CProcessServer2::onDataIn() { printf("CProcessServer2 onDataInn"); return 0; } int main() { CProcessServer2 *pProcessObj = new CProcessServer2; CRtpServer1 *pRtpSvr = new CRtpServer1(pProcessObj); cout << "==============================" << endl; pRtpSvr->onConnect(); pRtpSvr->onDataIn(); cout << "==============================" << endl; delete pProcessObj; delete pRtpSvr; printf(" 33[0m""[%s|%d] main exitn", __FUNCTION__, __LINE__); return 0; }
编译命令:g++ virtual-fun-interface.cpp -o demo
运行结果:
双等号线中间可以看出函数调用关系,在pRtpSvr中调用成员函数发生了多态。



