第十一站:多态练习ODU

这篇具有很好参考价值的文章主要介绍了第十一站:多态练习ODU。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现动态切换

第十一站:多态练习ODU,c++,算法,开发语言

ODU.h

#pragma once
#include <iostream>
using namespace std;
#define ODU_TYPE_311_FLAG "311"
#define ODU_TYPE_335_FLAG "335"
enum class ODU_TYPE {
	ODU_TYPE_311,
	ODU_TYPE_335,
	ODU_TYPE_UNKNOW
};

class ODU{
public:
	ODU();
	//发射频率
	virtual bool setTxFreq(int);
	virtual int getTxFreq();
	//接收频率
	virtual bool setRxFreq(int);
	virtual int getRxFreq();
	//发射功率
	virtual bool setTxPower(float);
	virtual float getTxPower();
	//获取接收电平
	virtual float getRxl();
	//获取心电包
	virtual bool hearBeat();
	//获取设备的名称
	virtual string name();
	//获取设备类型
	virtual ODU_TYPE getOduType();
protected:
	int TxFreq;
	int RxFreq;
	float TxPower;
	float rxl;
	ODU_TYPE type;
};

ODU335.h

#pragma once
#include "ODU.h"
class ODU335 :public ODU{
public:
	ODU335();
	//重写父类heat
	bool hearBeat();
};

ODU.CPP

#include "ODU.h"


/*
	int TxFreq;
	int RxFreq;
	float TxPower;
	float rxl;
	ODU_TYPE type;
*/
ODU::ODU(){
	TxFreq = 34100;
	RxFreq = 31000;
	TxPower = 40;
	rxl = 0;
	type = ODU_TYPE::ODU_TYPE_311;
	cout << "调用老设备" << endl;
}

bool ODU::setTxFreq(int frequence)
{
	TxFreq = frequence;
	cout << name() << "设置发射频率为:" << TxFreq << "Hz" << endl;
	return true;
}

int ODU::getTxFreq()
{
	return TxFreq;
}

bool ODU::setRxFreq(int frequence)
{
	RxFreq = frequence;
	cout << name() << "设置接收频率为:" << RxFreq << "Hz" << endl;
	return true;
}

int ODU::getRxFreq()
{
	return RxFreq;
}

bool ODU::setTxPower(float power)
{
	TxPower = power;
	cout << name() << "设置发射功率为:" << TxPower << "dpm" << endl;
	return true;
}

float ODU::getTxPower()
{
	return TxPower;
}

float ODU::getRxl()
{
	return rxl;
}

bool ODU::hearBeat()
{
	cout << name() << "模拟串口协议读取数据:获取心跳包的反馈...[" << ODU_TYPE_311_FLAG
		<< "]";
	string response;
	cin >> response;
	bool ret = false;
	if (response == ODU_TYPE_311_FLAG) {
		type = ODU_TYPE::ODU_TYPE_311;
		ret = true;
	}
	return ret;
}

string ODU::name()
{
	string ret;
	switch (type)
	{
	case ODU_TYPE::ODU_TYPE_311:
		ret = "ODU311";
		break;
	case ODU_TYPE::ODU_TYPE_335:
		ret = "ODU335";
		break;
	case ODU_TYPE::ODU_TYPE_UNKNOW:
	default:
		ret = "ODU_UNKNOW";
		break;
	}
	return ret;
}

ODU_TYPE ODU::getOduType()
{
	return type;
}

ODU335.CPP

#include "ODU335.h"
#include "ODU.h"
ODU335::ODU335()
{
	cout << "调用ODU335" << endl;
	type = ODU_TYPE::ODU_TYPE_335;

}

bool ODU335::hearBeat()
{
	cout << name() << "模拟串口协议读取数据:获取心跳包的反馈...[" << ODU_TYPE_335_FLAG
		<< "]";
	string response;
	cin >> response;
	bool ret = false;
	if (response == ODU_TYPE_335_FLAG) {
		type = ODU_TYPE::ODU_TYPE_335;
		ret = true;
	}
	return ret;
}

main.cpp文章来源地址https://www.toymoban.com/news/detail-811621.html

#include <iostream>
#include <Windows.h>
#include <thread>
#include "ODU.h"
#include "ODU335.h"
using namespace std;
ODU* odu = NULL;
void test(ODU* odu) {
	odu->setTxFreq(35000);
	cout << odu->getRxFreq() << endl;
	odu->hearBeat();
}
void oduMonitorHandler() {
	while (1){
		if (odu->hearBeat() == false) {
			//切换odu
			ODU_TYPE type = odu->getOduType();
			switch (type) {
			case ODU_TYPE::ODU_TYPE_311:
				delete odu;
				odu = new ODU335;
				break;
			case ODU_TYPE::ODU_TYPE_335:
				delete odu;
				odu = new ODU;
				break;
			default:
				odu = NULL;
				return;
			}
		}
	}
}
int main(void) {
	odu = new ODU();
	//创建一个线程
	thread oduMonitor(oduMonitorHandler);
	//等待主线程结束
	oduMonitor.join();
	return 0;
}

到了这里,关于第十一站:多态练习ODU的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言第十一课--------操作符的使用与分类-------基本操作

             作者介绍:           作者id : 老秦包你会 , 简单介绍:              喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨                                 个人主页::小小页面                                   gitee页面

    2024年02月14日
    浏览(34)
  • 微服务开发系列 第十一篇:XXL-JOB

    A、技术栈 开发语言:Java 1.8 数据库:MySQL、Redis、MongoDB、Elasticsearch 微服务框架:Spring Cloud Alibaba 微服务网关:Spring Cloud Gateway 服务注册和配置中心:Nacos 分布式事务:Seata 链路追踪框架:Sleuth 服务降级与熔断:Sentinel ORM框架:MyBatis-Plus 分布式任务调度平台:XXL-JOB 消息中间

    2024年02月10日
    浏览(28)
  • 【Chatgpt4 教学】 NLP(自然语言处理)第十一课 n-gram模型原理

    我起/点更新NLP(自然语言处理)——《王老师带我成为救世主》 (1)--------------------------------------------------------------------------------------- 我:简要介绍n-gram模型及其优缺点; AI: n-gram模型是一种用于语言建模和文本生成的基本模型,它基于一个简单的假设:一个单词在出现

    2023年04月19日
    浏览(35)
  • 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

    Vue 是前端开发中非常常见的一种框架,它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中,组件的开发也变得非常简单,但随着 Vue3 版本的发布,组件开发有了更多的特性和优化,为我们的业务开发带来了更多便利。本文将介绍如何使用 Vue3 开发业务组件

    2024年02月19日
    浏览(49)
  • 学习笔记|定时器|STC中断|定时器时间计算|STC32G单片机视频开发教程(冲哥)|第十一集:定时器的作用和意义

    什么是定时器:定时器-与非网 上节课的一段代码: TimeCount++然后一个延时1毫秒,每运行1ms,变量就会加一。 系统已经运行了多少个毫秒。 实际使用时的代码如下, 判断按键有沿有按下的时候,我们等待按键松开,还有一个while循环。 如果没有松开,会一直死在这一行。所以,

    2024年02月09日
    浏览(44)
  • Go语言开发小技巧&易错点100例(十一)

    往期回顾: Go语言开发小技巧易错点100例(一) Go语言开发小技巧易错点100例(二) Go语言开发小技巧易错点100例(三) Go语言开发小技巧易错点100例(四) Go语言开发小技巧易错点100例(五) Go语言开发小技巧易错点100例(六) Go语言开发小技巧易错点100例(七) Go语言开

    2024年01月20日
    浏览(24)
  • 【从零开始学习JAVA | 第十五篇】 多态

    本篇我们来解释一下什么是多态关系,多态关系属于面向对象三大特征的最后一个,可以说面向对象的重点就在多态,因此我们要学好面向对象编程思想,就要学好多态。         Java中的多态是指 同一类对象在不同情况下可能表现出不同的形态和行为。 它包括了 方法重

    2024年02月10日
    浏览(42)
  • C++,多态练习

    一、定义基类Animals,以及多个派生类,基类中至少包含虚函数perform() 二、用函数模型实现不同数据类型的交换功能 

    2024年02月11日
    浏览(20)
  • Java学习笔记---多态综合练习

    运行结果:

    2024年02月09日
    浏览(22)
  • AWS Skill Builder - 练习 ACF 认证的第一站

    AWS Skill Builder https://explore.skillbuilder.aws/learn 是 AWS 针对要想要自学 AWS 云计算技术所提供的网站,里面提了很多自学的课程,今天要展示的是在学习完 AWS Academy Cloud Foundations 课程后,如何透过 AWS Skill Builder 进行 AWS Cloud Practitioner 云从业人员认证的刷题练习。 进入 AWS Skill Bui

    2024年02月01日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包