【模拟微波通信简易小项目】多态集成

一.输出效果

在这里插入图片描述

橙色框出部分为控制台输入, 模拟心跳包反馈的目前活动的仪器. 可见若两台机器中的331工作中收到331心跳包反馈, 则继续工作, 收到其他心跳包反馈则停止工作, 切换到335工作. 335同理.

二.设计思路

设计类图:

设计思路: ODU335继承已有仪器ODU的方法与字段( 变量 ), 极大简化升级更新所需编码量. override强调重写父类方法获取名字(string name() )及获取心跳包反馈( bool heartbeat() ).

父类:

ODU.h

#pragma once
#include <iostream>
using namespace std;
/*
实现:发射频率(txFreq-frequence),
接收频率(rxFreq),
发射功率(txPower-transmit power),
的读取与设置;
接收电平(rxL-receive level)
的读取;
心跳包(heartBeat)
正在工作类型与工作状态的获取;
获取设备名称(name)与设备类型(type)
初始化:
	txFre = 34400;
	rxFre = 31100;
	txPower = 20;
	rxL = 0;
	type = ODU_TYPE::ODU_TYPE_331;
*/
enum class ODU_TYPE {
	ODU_TYPE_331,
	ODU_TYPE_335,
	ODU_TYPE_FUTURE
};
#define ODU_TYPE_331_FLAG "331"
#define ODU_TYPE_335_FLAG "335"

class ODU
{
public:
	ODU(ODU_TYPE oduType = ODU_TYPE::ODU_TYPE_331);
	int getTxFreq();// 发射频率
	void setTxFreq(int);
	int getRxFreq();// 接收频率
	void setRxFreq(int);
	int getTxPower();// 发射功率
	void setTxPower(int);
	int getRxLevel();// 接收电平

	virtual bool heartBeat();// 心跳包
	virtual string name();

	ODU_TYPE type;

private://为何不设为protected--唯一差别是子类访问权限,子类(ODU335)不需要访问(ODU331)
	int txFreq;
	int rxFreq;
	int txPower;
	int rxLevel;
};

ODU.cpp

#include "ODU.h"


ODU::ODU(ODU_TYPE oduType)
{
		cout << name() << __FUNCTION__ << endl;
		txFreq = 34400;
		rxFreq = 31100;
		txPower = 20;
		rxLevel = 0;
		type = oduType;
}

int ODU::getTxFreq()
{
	cout << name() << __FUNCTION__ << endl;
	return txFreq;
}

void ODU::setTxFreq(int txFreq)//只有继承的才可以加冒号写rxFreq(rxFreq)
{
	cout << name() << __FUNCTION__ << endl;
	this->txFreq = txFreq;
}

int ODU::getRxFreq()
{
	cout << name() << __FUNCTION__ << endl;
	return rxFreq;
}

void ODU::setRxFreq(int rxFreq)
{
	cout << name() << __FUNCTION__ << endl;
	this->rxFreq = rxFreq;
}

int ODU::getTxPower()
{
	cout << name() << __FUNCTION__ << endl;
	return txPower;
}

void ODU::setTxPower(int txPower)
{
	cout << name() << __FUNCTION__ << endl;
	this->txPower = txPower;
}

int ODU::getRxLevel()
{
	cout << name() << __FUNCTION__ << endl;
	return rxLevel;
}

bool ODU::heartBeat()
{
	cout << name() << __FUNCTION__ << endl;
	cout << name() << "模拟串口协议读取数据:获取心跳包的反馈..."
		<< "【" << ODU_TYPE_331_FLAG << "】" << endl;
	string response;
	cin >> response;

	if (ODU_TYPE_331_FLAG == response) {
		type = ODU_TYPE::ODU_TYPE_331;
		return true;
	}
	//else if (ODU_TYPE_335_FLAG == response)//这个在ODU335中改写即可
	//{
	//	type = ODU_TYPE::ODU_TYPE_335;
	//	return false;
	//}
	return false;
}

string ODU::name()
{
	return ODU_TYPE_331_FLAG;
}

子类:

ODU335.h

#pragma once
#include "ODU.h"
class ODU335 : public ODU
{
public:
	ODU335(ODU_TYPE oduType = ODU_TYPE::ODU_TYPE_335);
	bool heartBeat() override;//重写虚函数时注意!名字是否相同!

	string name() override;
};

ODU335.cpp

#include "ODU335.h"

ODU335::ODU335(ODU_TYPE oduType):ODU(oduType)
{
	cout << name() << __FUNCTION__ << endl;
}

bool ODU335::heartBeat()
{
	cout << __FUNCTION__ << endl;
	cout << name() << "模拟串口协议读取数据:获取心跳包的反馈..."
		<< "【" << ODU_TYPE_335_FLAG << "】" << endl;
	string response;
	cin >> response;

	if (ODU_TYPE_335_FLAG == response) {
		type = ODU_TYPE::ODU_TYPE_335;
		return true;
	}

	return false;
}

string ODU335::name()
{
	return ODU_TYPE_335_FLAG;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值