C++中经常使用基类和派生对象多态的特性实现一些数据的传输,基类为纯虚类的接口类,派生类继承接口类。以下实现了一个典型的多态实例,该实例可以应用在软件开发中两个类的数据传输中。下面直接上代码:
/*
* Description: 一种使用纯虚类接口实现数据回调的方式
* Date: xxxx-xx-xx
*
**/
#include <iostream>
using namespace std;
/* 纯虚基类接口 */
class ICRtpListen
{
private:
/* data */
public:
ICRtpListen(/* args */);
~ICRtpListen();
int firstFunction0();
virtual int onConnect() = 0;
virtual int onDataIn() = 0;
};
ICRtpListen::ICRtpListen(/* args */)
{
printf("ICRtpListen\n");
}
ICRtpListen::~ICRtpListen()
{
printf("~ICRtpListen\n");
}
/* 派生类 */
class CRtpServer1: public ICRtpListen
{
private:
/* data */
public:
CRtpServer1();
CRtpServer1(ICRtpListen *pBaseObj);
~CRtpServer1();
int firstFunction1();
virtual int onConnect();
virtual int onDataIn();
public:
ICRtpListen *pBaseRtpObj; // 一个基类指针成员
};
CRtpServer1::CRtpServer1()
{
printf("CRtpServer1\n");
}
CRtpServer1::CRtpServer1(ICRtpListen *pBaseObj)
{
pBaseRtpObj = pBaseObj; // 保存基类指针
printf("CRtpServer1\n");
}
CRtpServer1::~CRtpServer1()
{
printf("~CRtpServer1\n");
}
int CRtpServer1::onConnect()
{
pBaseRtpObj->onConnect();
printf("CRtpServer1 onConnect in\n");
return 0;
}
int CRtpServer1::onDataIn()
{
pBaseRtpObj->onDataIn();
printf("CRtpServer1 cb data coming in...\n");
return 0;
}
/* 数据处理类 */
class CProcessServer2: public ICRtpListen
{
private:
/* data */
public:
CProcessServer2();
~CProcessServer2();
int firstFunction1();
virtual int onConnect();
virtual int onDataIn();
};
CProcessServer2::CProcessServer2(/* args */)
{
printf("CProcessServer2\n");
}
CProcessServer2::~CProcessServer2()
{
printf("~CProcessServer2\n");
}
int CProcessServer2::onConnect()
{
printf("CProcessServer2 onConnect\n");
}
int CProcessServer2::onDataIn()
{
printf("CProcessServer2 onDataIn\n");
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("\033[0m""[%s|%d] main exit\n", __FUNCTION__, __LINE__);
return 0;
}
编译命令:g++ virtual-fun-interface.cpp -o demo
运行结果:
双等号线中间可以看出函数调用关系,在pRtpSvr中调用成员函数发生了多态。