当前位置: 首页 > news >正文

【C++ Primer Plus习题】15.1

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

问题:

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解答:
main.cpp

#include <iostream>
#include "tv.h"
using namespace std;int main()
{Tv s42;cout << "Initial setting for 42\"TV:\n";s42.setting();s42.onoff();s42.chanup();cout << "\nAdjusted settings for 42\" TV:\n";s42.chanup();cout << "\nAdiusted setting for 42\" TV:\n";s42.setting();Remote grey;grey.set_chan(s42, 10);grey.volup(s42);grey.volup(s42);cout << "\n42\" setting after using remote:\n";s42.setting();Tv s58(Tv::On);s58.set_mode();grey.set_chan(s58, 28);cout << "\n58\" setting:\n";s58.setting();return 0;}

tv.h

#pragma once
#include <iostream>
using namespace std;class Remote;class Tv
{
public:friend class Remote;enum{Off,On};enum{MinVal,MaxVal=20};enum{Antenna,Cable};enum{TV,DVD};Tv(int s = Off, int mc = 125):state(s), volume(5),maxchannel(mc),channel(2),mode(Cable),input(TV){}void onoff() { state = (state == On) ? Off : On; }bool ison()const { return state == On; }bool volup();bool voldown();void chanup();void chandown();void set_mode() { mode = (mode == Antenna) ? Cable : Antenna; }void set_input() { input = (input == TV) ? DVD : TV; }void setting()const;void set_Rmode(Remote& r);private:int state;int volume;int maxchannel;int channel;int mode;int input;
};class Remote
{
public:enum{Normal,InterActive};
private:int mode;int work_mode;
public:friend class Tv;Remote(int m=Tv::TV):mode(m){}bool volup(Tv& t) { return t.volup(); }bool 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 show_mode()const { return work_mode; }
};

tv.cpp

#include "tv.h"bool Tv::volup()
{if (volume < MaxVal){volume++;return true;}else{return false;}
}
bool Tv::voldown()
{if (volume > MinVal){volume--;return true;}else{return false;}
}
void Tv::chanup()
{if (channel < maxchannel){channel++;}else{channel = 1;}
}
void Tv::chandown()
{if (channel > 1){channel--;}else{channel = maxchannel;}
}
void Tv::setting()const
{cout << "TV is " << (state == Off ? "OFF" : "ON") << endl;if (state == On){cout << "Volume setting = " << volume << endl;cout << "Channel setting = " << channel << endl;cout << "Mode = " << (mode == Antenna ? "antenna" : "cable") << endl;cout << "input = " << (input == TV ? "TV" : "DVD") << endl;}
}inline void Tv::set_Rmode(Remote& r)
{r.work_mode = (r.work_mode == Remote::Normal) ? Remote::InterActive : Remote::Normal;
}

运行结果:
在这里插入图片描述

考查点:

  • 友元类
  • 三目运算符

注意:

  • 用三目运算符来切换状态
    在这里插入图片描述

2024年9月11日19:24:56


http://www.mrgr.cn/news/24599.html

相关文章:

  • NoSQL之Redis
  • 文章在线改写如何效率高?智能改写神有妙招!
  • 【线程池】Java 线程池 ThreadPoolExecutor 类源码介绍
  • 深入理解 JavaScript:进阶概念与实战技巧
  • Linux用户和组群账户管理
  • 使用libmpeg解码mp3格式文件
  • ORCAD位号,BOOM表
  • 【Linux】【Vim】Vim 基础
  • 【网络安全】-文件下载漏洞-pikachu
  • 什么是谷歌留痕?
  • windows下 MySQL8.4.2 LTS 解压版的安装使用
  • Python 资源管理的得力助手
  • 动态规划(算法)---03.斐波那契数列模型_最小花费爬楼梯
  • 记录一次NGINX和Java后端造成的CORS跨域BUG
  • (一)springboot2.6.13+mybatis-plus3.5.3.1+shardingsphere4.0.0-RC2
  • 如何通过海外云手机提升运营效率
  • 漏洞挖掘 | 产出如此简单?BigF5内网ip泄漏
  • k8s环境配置
  • Leetcode 701-二叉搜索树中的插入操作
  • 287. 寻找重复数(stl法)