【C++OJ_静态与友元】电视机与遥控器(友元类)

【C++OJ_静态与友元】电视机与遥控器(友元类)

题目描述

有如下的电视类和遥控器类,遥控器在电视开机的情况下可以控制电视。

在这里插入图片描述

要求如下:

1.实现并完善Tv类;其中构造函数需修改和完善。另:最大频道为100;

2.将Remote设为Tv的友元类,以支持在Remote类中对Tv方法的调用。

3.在main函数中,通过Remote实例对TV实例进行操作。

输入

第一行,电视初始状态,依次为state,volume,channel,mode,input的初始值。

第二行,利用遥控器对上述状态的操作指令,用对应的函数名表示,如增加音量为volup

输出

第一行,执行遥控器操作后的状态。

输入样例

off 10 19 Cable VCR
onoff volup chanup set_mode set_input

输出样例

on 11 20 Antenna TV

参考代码

#include <iostream>
#include <cstring>
using namespace std;
class TV //电影类
{
    int state;      //电视开关状态,on或者off
    int volume;     //音量,取值范围从0到20
    int maxchannel; //支持最大频道
    int channel;    //当前频道
    int mode;       //电视信号接收模式,Cable或者Antenna
    int input;      //输入方式 VCR或者TV

public:
    TV(int s, int v, int c, int m, int i) : state(s), volume(v), maxchannel(100), channel(c), mode(m), input(i) {} //构造函数
    void onoff()                                                                                                   //切换电视开关状态
    {
        if (ison() == true)
            state = 0;
        else
            state = 1;
    }
    bool ison() const // 判断电视开关状态,on返回true
    {
        if (state == 1)
            return true;
        else
            return false;
    }
    void volup() //增加音量。执行一次+1
    {
        if (ison() == true)
        {
            if (volume == 20)
                ;
            else
                volume++;
        }
    }
    void voldown() //降低音量。执行一次-1
    {
        if (ison() == true)
        {
            if (volume == 0)
                ;
            else
                volume--;
        }
    }
    void chanup() //增加频道数,执行一次+1
    {
        if (ison() == true)
        {
            if (channel == 100)
                ;
            else
                channel++;
        }
    }
    void chandown() //减少频道数,执行一次-1
    {
        if (ison() == true)
        {
            if (channel == 1)
                ;
            else
                channel--;
        }
    }
    void set_mode() // 切换电视信号接收模式,初始为Cable
    {
        if (ison() == true)
        {
            if (mode == 0)
                mode = 1;
            else if (mode == 1)
                mode = 0;
        }
    }
    void set_input() // 切换电视输入方式,初始为VCR
    {
        if (ison() == true)
        {
            if (input == 0)
                input = 1;
            else if (input == 1)
                input = 0;
        }
    }
    void settings() const //按类中成员顺序,输出电视设置信息
    {
        if (state == 1)
            cout << "on ";
        else
            cout << "off ";
        cout << volume << " " << channel << " ";
        if (mode == 1)
            cout << "Antenna ";
        else
            cout << "Cable ";
        if (input == 1)
            cout << "TV";
        else
            cout << "VCR";
    }
    friend class Remote; //将Remote设为Tv的友元类,以支持在Remote类中对Tv方法的调用。
};
class Remote
{
    int mode; //控制TV or VCR
public:
    Remote() {}
    Remote(int m) : mode(m) {}
    void volup(TV &t) { return t.volup(); }
    void voldown(TV &t) { return t.voldown(); }
    void onoff(TV &t) { t.onoff(); }
    void chanup(TV &t) { t.chanup(); }
    void chandown(TV &t) { t.chandown(); }
    void set_chan(TV &t, int c) { t.channel = c; }
    void set_mode(TV &t) { t.set_mode(); }
    void set_input(TV &t) { t.set_input(); }
};

int main()
{
    int v, c, s_n, m_n, i_n;
    char s[4], m[8], i[4];
    cin >> s >> v >> c >> m >> i;
    if (strcmp(s, "off") == 0)
        s_n = 0;
    else
        s_n = 1;
    if (strcmp(m, "Antenna") == 0)
        m_n = 1;
    else
        m_n = 0;
    if (strcmp(i, "TV") == 0)
        i_n = 1;
    else
        i_n = 0;
    TV t(s_n, v, c, m_n, i_n);

    int tt = 5;
    while (tt--)
    {
        int cc;
        Remote r;
        char re[10];
        cin >> re;
        if (strcmp(re, "onoff") == 0)
            r.onoff(t);
        if (strcmp(re, "volup") == 0)
            r.volup(t);
        if (strcmp(re, "voldown") == 0)
            r.voldown(t);
        if (strcmp(re, "chanup") == 0)
            r.chanup(t);
        if (strcmp(re, "set_chan") == 0)
        {
            cin >> cc;
            r.set_chan(t, cc);
        }
        if (strcmp(re, "set_mode") == 0)
            r.set_mode(t);
        if (strcmp(re, "set_input") == 0)
            r.set_input(t);
    }
    t.settings();
    cout << endl;
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ferry_xie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值