#include <iostream>
using namespace std;
/*---------------------------------
第20章友元素 1.1 友元类
A是B的友元类,则A可以访问B的成员,但B不能访问A的成员
---------------------------------*/
class TV
{
public:
friend class Tele;//Tele是TV的友元类,所以,Tele类对象可以访问TV类的成员
TV():on_off(off),mode(tv),channel(5),volume(20){}
private:
enum{on,off};
enum{tv,av};
enum{mincl,maxcl=60};
enum{minve,maxve=100};
bool on_off;
int mode;
int channel;
int volume;
};
class Tele
{
public:
void Onoff(TV& t) {t.on_off=(t.on_off==t.on)?t.off:t.on;}
void Setmode(TV& t){t.mode=(t.mode==t.tv)?t.av:t.tv;}
bool VolumeDown(TV& t);
bool VolumeUp(TV& t);
bool ChannelDown(TV& t);
bool ChannelUp(TV& t);
void Show(TV& t)const;
};
bool Tele::VolumeDown(TV& t)
{
if(t.volume>t.minve)
{
t.volume--;
return true;
}
else
{ return false;}
}
bool Tele::VolumeUp(TV& t)
{
if(t.volume<t.maxve)
{
t.volume++;
return true;
}
else
{ return false;}
}
bool Tele::ChannelDown(TV& t)
{
if(t.channel>t.mincl)
{
t.channel--;
return true;
}
else
{ return false;}
}
bool Tele::ChannelUp(TV& t)
{
if(t.channel<t.maxcl)
{
t.channel++;
return true;
}
else
{ return false;}
}
void Tele::Show(TV& t)const
{
if(t.on_off==t.on)
{
cout<<"电视机处于"<<(t.on_off==t.on ? "开启状态":"关闭状态")<<endl; //条件表达式整个外部加上小括号才能编译正确
cout<<"音量大小为:"<<t.volume<<endl;
cout<<"频道为:"<<t.channel<<endl;
cout<<"信号接收模式为:"<<(t.mode==t.tv ? "TV":"AV")<<endl;
}
else
cout<<"电视机处于关闭状态"<<endl;
}
int main()
{
Tele t1;
TV t2;
t1.Show(t2);
cout<<"--------------"<<endl;
t1.Onoff(t2);
t1.Show(t2);
cout<<"--------------"<<endl;
t1.ChannelDown(t2);
t1.Setmode(t2);
t1.VolumeUp(t2);
t1.Show(t2);
return 0;
}
运行结果:
电视机处于关闭状态
--------------
电视机处于开启状态音量大小为:20
频道为:5
信号接收模式为:TV
--------------
电视机处于开启状态音量大小为:21
频道为:4
信号接收模式为:AV
Press any key to continue