C++多态的实现,进行自动不同的设备切换接收数据

本文介绍了如何利用C++的多态特性,通过虚函数重写实现不同设备的心跳包数据反馈。当检测到数据错误时,程序会自动切换到另一台设备进行数据接收,以确保系统的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

父类和子类两个设备,利用虚函数重写模拟读取数据反馈

enum class ODU_TYPE
{

//两个不同的ODU设备
    ODU_TYPE_331,
    ODU_TYPE_332,

}odu_tybe;


bool ODU::heartBeat()
{
    cout << name() << "模拟读取串口协议,获取心跳包数据反馈..." <<  endl;
    string str;
    str=(接收的数据);
    bool ret = false;
    if (str==(自己设备的数据))
    {
        odu_tybe = ODU_TYPE_331;//等于自身设备
        cout << "OUD设备" << ODU_TYPE_331 << "反馈数据正常" << endl;
        ret = true;
    }

    return ret;
}

//循环对心跳包进行判断,如果读出数据错误就让设备进行切换

ODU_331* odu = NULL;//创建一个父类指针为odu的全局对象

void oduMonitorHandler()

{

    while (1)
    {
        if (odu_331->heartBeat() == false)
        {           
           ODU_TYPE  tybe = (获取当前设备的函数);//判断当前是什么设备
            {
            case ODU_TYPE::ODU_TYPE_331:
                delete odu;//删除原有的设备对象
                odu = new ODU_332;//切换到另一个设备
                break;
            case ODU_TYPE::ODU_TYPE_332:
                delete odu;
                odu = new ODU_331;
                break;
        
            default:
                odu = NULL;

                return;
            }
        }

        Sleep(3000);//等待接收数据的判断时间
    }

}

 

int main()
{
    
    odu = new ODU_331();//首先运行的是设备331

    //这个是线程的头文件#include<thread>
    thread oduMonitor(oduMonitorHandler);//创建一个单独的线程,运行对心跳包进行判断的函数

    oduMonitor.join();//线程等待这个函数结束,因为是循环可以不停的判断直到遇到终止的条件

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值