C++ Primer Plus第六版 第十五章 编程练习答案

//第一题
//main.cpp
#include "TV.h"

int main()
{
	Tv s42;
	std::cout << "Initial settings for 42\" TV:\n";
	s42.settings();
	s42.onoff();
	s42.chanup();
	std::cout << "\nAdjusted settings for 42\" Tv:\n";
	s42.settings();

	Remote grey;

	grey.set_chan(s42, 10);
	grey.volup(s42);
	grey.volup(s42);
	std::cout << "\n42\" settings after using remote:\n";
	s42.settings();

	grey.ShowAMode();
	s42.ChangeAMode(grey);
	grey.ShowAMode();

	return 0;
}

//TV.h
#ifndef TV_H_
#define TV_H_

#include <iostream>

class Tv
{
private:
	int state;
	int volume;
	int maxchannel;
	int channel;
	int mode;
	int input;
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 ^= 1; }
	bool ison() const { return state == ON; }
	bool volup();
	bool voldown();
	void chanup();
	void chandown();
	void set_mode() { mode ^= 1; }
	void set_input() { input ^= 1; }
	void settings() const;
	void ChangeAMode(Remote &r);
};

class Remote
{
private:
	int mode;
	int AMode;
public:
	friend class Tv;
	Remote(int m = Tv::TV, int n = NORMAL) : mode(m), AMode(n) {}
	enum { NORMAL, INTERACTIVE };
	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(); }
	void ShowAMode() const { std::cout << "现在是: " << (AMode == NORMAL ? "常规模式" : "交互模式") << std::endl; }
};

#endif

//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::settings() const
{
	std::cout << "TV is " << (state == OFF ? "OFF" : "ON&#
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值