Friend类

作用:友元类的所有方法都可以访问原始类的私有成员和保护成员。

使用:A类可以修改B类的状态。

#include <iostream>

using namespace std;
#ifndef TV_H_
#define TV_H_

class Tv
{
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 = (state == ON)?OFF:ON;}
    bool ison() const {return state == ON;}
    bool volup();
    bool voldown();
    void chanup();
    void chandown();
    void set_mode(){mode = (mode == ANTENNA)?CABLE:ANTENNA;}
    void set_input() {input = (input==TV)?DVD:TV;}
    void settings() const;

private:
    int state;
    int volume;
    int maxchannel;
    int channel;
    int mode;
    int input;
};

class Remote
{
public:
    Remote(int m = Tv::TV) :mode(m){}
    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 ();}

private:
    int mode;
};

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
{
    cout<<"TV is "<<(state == ON?"ON":"OFF")<<endl;
    if(state == ON)
    {
        cout<<"Volume setting ="<<volume<<endl;
        cout<<"Channel setting = "<<channel<<endl;
        cout<<"Mode ="<<(mode == ANTENNA?"antenna":"cable")<<endl;
        cout<<"Input = "<<(input == TV?"TV":"DVD")<<endl;
    }
}
#endif

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值