C++之电视机和遥控器的友元类

本文介绍了如何用C++编程语言设计一个电视机类和遥控器类,包括电源操作、音量增减、频道切换以及遥控器设置频道的功能,并提供了测试示例。
摘要由CSDN通过智能技术生成

一、题目描述
电视机有开机和关机状态,有音量,有频道,提供音量操作的方法,频道操作的方法。由于电视机只能逐一调整频道,不能指定频道,增加遥控类,遥控类除了拥有电视机已有的功能,再增加根据输入调台功能。
二、代码实现

#include<iostream>

using namespace std;

//声明遥控器类
class Remoter;

//定义电视类
class Tv
{
    friend class Remoter;
    enum
    {
        OFF,
        ON
    };
    enum
    {
        MIN_V,
        MAX_V = 100
    };
    enum
    {
        MIN_CH = 1,
        MAX_CH = 255
    };

private:
   int mStatus;     //电视状态
   int mVolume;     //声音
   int mChannel;    //频道
public:
   Tv()
   {
    mStatus = OFF;     //状态
    mVolume = 10;      //声音
    mChannel = MIN_CH; //频道  
   }

   void power()  //电源按钮
   {
    mStatus = mStatus ? OFF : ON;
   }

   void volumeUp()
   {
    if(mVolume != MAX_V)
      mVolume++;
    showInfo();
   }

   void volumeDown()
   {
    if(mVolume != MIN_V)
      mVolume--;
    showInfo();
   }
    
   void channelUp()
   {
    if(mChannel != MAX_CH)
       mChannel++;
    showInfo();
   }

   void channelDown()
   {
    if(mChannel != MIN_CH)
       mChannel--;
    showInfo();
   }

   void showInfo()
   {
      if(mStatus)
      {
        cout << "status ON, volume " << mVolume << ", channel " << mChannel <<endl;  //输出格式也可以自行修改
      }
   }
};

   //定义遥控器类
   class Remoter
   {
private:
   Tv *mTv;

public:
   Remoter(Tv *tv)
   {
    mTv = tv;
   }
   void power()
   {
    mTv->power();
   }
   void vUp()
   {
    mTv->volumeUp();
   }
   void vDown()
   {
    mTv->volumeDown();
   }
   void chUp()
   {
    mTv->channelUp();
   }
   void chDown()
   {
    mTv->channelDown();
   }

   void setChannel(int ch)
   {
    if(ch >= mTv->MIN_CH && ch <= mTv->MAX_CH)
    {
        mTv->mChannel = ch;
        mTv->showInfo();
    }
   }
   };
   void test()  //测试函数可以根据自己需求修改
{
    Tv *tv = new Tv();
    Remoter remoter(tv);
    remoter.power();
    remoter.setChannel(25);
    remoter.vUp();
    remoter.vUp();
    remoter.vUp();
    remoter.chDown();
    remoter.power();
    delete tv;
}

int main(int argc, char const *argv[])
{
    test();
    return 0;
}

三、测试结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值