#include #include #include 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; }