C++_友元类

来源:互联网 发布:nginx从入门到精通 pdf 编辑:程序博客网 时间:2024/05/13 02:43
#include <iostream>using namespace std;class TV  // 电视机类{public:    friend class Tele;  // friend是关键字,代表类Tele是类TV的友元类    TV():on_off(off),volume(20),channel(3),mode(tv){}private:    enum{on = 0, off = 1};    enum{tv = 0, av = 1};    enum{minvol = 0, maxvol = 100};    enum{minchn = 0, maxchn = 60};        bool on_off;  // 开关    int volume;  // 音量    int channel;  // 频道    int mode;  // 模式        /*    如果某个类有一个友元类,那么该类的私有成员及其保护成员都会暴露给友元类,友元类可通过自己的方法来访问该类的所有成员。     */};class Tele  // 遥控器类{public:    void OnOff(TV &t)    {        t.on_off = (t.on_off == t.on) ? t.off : t.on;  // 正是因为类Tele是类TV的友元类,所以类Tele可以直接操作类TV的所有私有成员    }    void SetMode(TV &t)    {        t.mode = (t.mode == t.tv) ? t.av : t.tv;    }        bool VolumeUp(TV &t);    bool VolumeDown(TV &t);    bool ChannelUp(TV &t);    bool ChannelDown(TV &t);    void show(TV &t)const;};bool Tele::VolumeUp(TV &t){    bool bVol;    if (t.volume < t.maxvol)    {        t.volume ++;        bVol = true;    }    else    {        bVol = false;    }        return bVol;}bool Tele::VolumeDown(TV &t){    bool bVol;    if (t.volume > t.minvol)    {        t.volume --;        bVol = true;    }    else    {        bVol = false;    }        return bVol;}bool Tele::ChannelUp(TV &t){    bool bChn;    if (t.channel < t.maxchn)    {        t.channel ++;        bChn = true;    }    else    {        bChn = false;    }        return bChn;}bool Tele::ChannelDown(TV &t){    bool bChn;    if (t.channel > t.minchn)    {        t.channel --;        bChn = true;    }    else    {        bChn = false;    }        return bChn;}void Tele::show(TV &t)const{    if (t.on_off == t.on)    {        cout << "电视机现在的状态:" << "开始" << endl;        cout << "音量大小为:" << t.volume << endl;        cout << "频道为:" << t.channel << endl;        cout << "信号接受模式为:" << t.mode << endl;    }    else    {        cout << "电视机现在的状态:" << "关闭" << endl;    }}int main(){    Tele t1;    TV t2;    t1.show(t2);    t1.OnOff(t2);    t1.show(t2);    cout << "调大声音" << endl;    t1.VolumeUp(t2);    cout << "频道+1" << endl;    t1.ChannelUp(t2);    cout << "转换模式" << endl;    t1.SetMode(t2);    t1.show(t2);        return 0;}







0 0
原创粉丝点击