友元练习: 电视机和遥控器
This commit is contained in:
parent
f956e9c5e2
commit
be4a556f0b
|
@ -0,0 +1,183 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// 声明遥控器类
|
||||||
|
class Remote;
|
||||||
|
|
||||||
|
// 定义电视类
|
||||||
|
class Television
|
||||||
|
{
|
||||||
|
friend class Remote;
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
On, // 电视开关状态
|
||||||
|
Off
|
||||||
|
};
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
minVol,
|
||||||
|
maxVol = 100 // 音量从 0 到 100
|
||||||
|
};
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
minChannel = 1,
|
||||||
|
maxChannel = 255 // 频道范围 1 到 255
|
||||||
|
};
|
||||||
|
|
||||||
|
Television()
|
||||||
|
{
|
||||||
|
mStatus = Off; // 状态
|
||||||
|
mVolume = minVol; // 声音
|
||||||
|
mChannel = minChannel; // 频道
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
void power() // 开关机
|
||||||
|
{
|
||||||
|
this->mStatus = (this->mStatus == On ? Off : On);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeUp() // 调高音量
|
||||||
|
{
|
||||||
|
if (this->mVolume >= maxVol)
|
||||||
|
return;
|
||||||
|
this->mVolume++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeDown() // 调低音量
|
||||||
|
{
|
||||||
|
if (this->mVolume <= minVol)
|
||||||
|
return;
|
||||||
|
this->mVolume--;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelUp() // 向上更换电视频道
|
||||||
|
{
|
||||||
|
if (this->mChannel >= maxChannel)
|
||||||
|
return;
|
||||||
|
this->mChannel++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelDown() // 向下更换电视频道
|
||||||
|
{
|
||||||
|
if (this->mChannel <= minChannel)
|
||||||
|
return;
|
||||||
|
this->mChannel--;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowTeleState() // 展示当前电视状态信息
|
||||||
|
{
|
||||||
|
cout << "开机状态: " << (mStatus == On ? "已开机" : "已关机") << endl;
|
||||||
|
if (mStatus == On)
|
||||||
|
{
|
||||||
|
cout << "当前音量: " << mVolume << endl;
|
||||||
|
cout << "当前频道: " << mChannel << endl;
|
||||||
|
}
|
||||||
|
cout << "----------------------" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int mStatus; // 电视状态
|
||||||
|
int mVolume; // 声音
|
||||||
|
int mChannel; // 频道
|
||||||
|
};
|
||||||
|
|
||||||
|
// 定义遥控器
|
||||||
|
class Remote
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Remote(Television *tv) // 构造函数
|
||||||
|
{
|
||||||
|
pTV = tv;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
void power() // 开关机
|
||||||
|
{
|
||||||
|
pTV->power();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeUp() // 调高音量
|
||||||
|
{
|
||||||
|
pTV->VolumeUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VolumeDown() // 调低音量
|
||||||
|
{
|
||||||
|
pTV->VolumeDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelUp() // 向上更换电视频道
|
||||||
|
{
|
||||||
|
pTV->ChannelUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChannelDown() // 向下更换电视频道
|
||||||
|
{
|
||||||
|
pTV->ChannelDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置频道,遥控器新增功能
|
||||||
|
void SetChannel(int channel)
|
||||||
|
{
|
||||||
|
if (channel < Television::minChannel || channel > Television::maxChannel)
|
||||||
|
return;
|
||||||
|
pTV->mChannel = channel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShowTeleState() // 展示当前电视状态信息
|
||||||
|
{
|
||||||
|
pTV->ShowTeleState();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Television *pTV;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 直接操作电视
|
||||||
|
void test01()
|
||||||
|
{
|
||||||
|
Television tv;
|
||||||
|
tv.ShowTeleState();
|
||||||
|
tv.power(); // 开机
|
||||||
|
tv.VolumeUp(); // 音量 +1
|
||||||
|
tv.VolumeUp();
|
||||||
|
tv.VolumeUp();
|
||||||
|
tv.VolumeUp();
|
||||||
|
tv.ChannelUp(); // 频道 +1
|
||||||
|
tv.ChannelUp();
|
||||||
|
tv.ShowTeleState();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通过遥控器操作电视
|
||||||
|
void test02()
|
||||||
|
{
|
||||||
|
// 创建电视
|
||||||
|
Television tv;
|
||||||
|
|
||||||
|
// 创建遥控器
|
||||||
|
Remote rmt(&tv);
|
||||||
|
|
||||||
|
rmt.ShowTeleState();
|
||||||
|
rmt.power(); // 开机
|
||||||
|
rmt.VolumeUp(); // 音量 +1
|
||||||
|
rmt.VolumeUp();
|
||||||
|
rmt.VolumeUp();
|
||||||
|
rmt.VolumeUp();
|
||||||
|
rmt.ChannelUp(); // 频道 +1
|
||||||
|
rmt.ChannelUp();
|
||||||
|
rmt.SetChannel(100);
|
||||||
|
rmt.ShowTeleState();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// test01();
|
||||||
|
test02();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue