我们今天设计的是简单的电视机和遥控器。
电视机类能控制电视开关机、调整音量和频道。
而这些功能在遥控器上面也可以完成,所以把遥控器设置成电视机
的友元类。这样遥控器也可以访问电视机内部的private成员。
下面我们上代码举例说明;
和之前的分文件编写一样,
我们把遥控器分成*.cpp *.h两个文件。
电视机也分成*.cpp *.h两个文件。
最后在main.cpp中调用。
在这里要注意,RemoteController类和TV类头文件相互包含,
所以在编译的时候,如果内部有声明对方的实例,
在声明的前面需要加上class 关键字,
否则会编译不过。
错误:error: ISO C++ forbids declaration of 'XXXX' with no type 这样的错误信息提示
下面上代码:
tv.h
//#pragma once
#ifndef __TV_H
#define __TV_H
#include <iostream>
#include <string>
#include "remoteController.h"
using namespace std;
/**
* TV类包含:
*
* 电视开关:
* 打开电视
* 关闭电视
*
* 声音控制:
* 最大声 audio MaxVal
* 最小声 audio MinVal
* 调大声 audio increase
* 调小声 audio decrease
*
* 频道控制:
* 频道递增
* 频道递减
* 直接选择某个频道
*
*/
class TV{
friend class RemoteController; //声明友元类
private:
/*
* const 成员变量只能在构造函数中做初始化,
* 且在初始化的形式不能再函数体内,只能用
* 列表的方式来进行初始化。
*/
const int tv_volume_MaxVal; //最大音量
const int tv_volume_MinVal; //最小音量
int tv_volume_val; //当前音量
const int tv_video_MaxChannel; //频道上限
const int tv_video_MinChannel; //频道下限
int tv_video_channel; //当前频道
const bool tv_on;
const bool tv_off;
bool tv_status;
string tv_brand;
public:
TV();
TV(string brand);
TV(TV &t);
~TV();
/* 以上是TV构造函数群和析构函数 */
/*设置TV品牌*/
void setTVBrand(string brand);
/*获取TV品牌*/
string getTVBrand(void);
/*设置TV开机关机*/
void setTVStatus(bool sta);
/*获取TV当前状态(开机/关机)*/
bool ge