第二十章友元类与嵌套类 1友元类
//第二十章友元类与嵌套类 1友元类 //与函数相同,类也可以作为另一个类的友元类,这样,另一个类的私有及其保护成员都会暴露给友元类,友元类可以通过自己的访问来访问另一个类的所有成员,但是,这并不代表另一个类可以访问它的友元类的所有成员 /*#include <iostream> using namespace std; //首先定义TV类,也就是电视机类 class TV { public: friend class Tele; //定义一个友元函数Tele; TV():on_off(off),volume(21),channel(3),mode(tv){} ~TV(){} private: enum{on,off}; //开关 enum{tv,av}; //模式 enum{minve,maxve=100}; //频道 enum{mincl,maxcl=60}; //音量 bool on_off; //开关 int volume; //频道 int channel; //音量 int mode; //模式 }; class Tele { public: void SetMode(TV&t); void OnOff(TV&t); bool VolumeUp(TV&t); bool VolumeDown(TV&t); bool ChannelUp(TV&t); bool ChannelDown(TV&t); void Show(TV&t); }; //显示函数 void Tele::Show(TV&t) { if(t.on_off ==t.on) { cout<<"电视机现在是"<<(t.on_off==t.on?"开启":"关闭")<<endl; cout<<"音量大小是"<<t.channel<<endl; cout<<"信号接收模式是"<<(t.mode==t.av?"AV":"TV")<<endl; cout<<"频道是"<<t.volume<<endl; }else{ cout<<"电视机现在是"<<(t.on_off==t.on?"开启":"关闭")<<endl; } } //减少音量 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; } } //减少频道 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; } } //设置开关 void Tele::OnOff(TV&t) { t.on_off = (t.on_off == t.off) ? t.on : t.off; } //设置模式 void Tele::SetMode(TV&t) { t.mode = (t.mode==t.tv) ? t.av : t.tv; }; int main() { TV tv; Tele tele; tele.Show(tv); tele.OnOff(tv); tele.Show(tv); cout<<"调大声音"<<endl; tele.ChannelUp(tv); cout<<"看下一个频道"<<endl; tele.VolumeDown(tv); cout<<"转换一下模式"<<endl; tele.SetMode(tv); tele.Show(tv); return 0; } */