CPP操作符重载

1在类中重载+=操作符

赋值操作符必须定义为成员函数,无论形参为何种类型

赋值必须返回*this 的引用

class Love{

public:

    int str;

    int agi;

    int intel;



    Love(): str(0), agi(0) , intel(0){}

    Love(int a , int b ,int c): str(a), agi(b) , intel(c){};

    Love& operator+=(const Love &test){

        str += test.str;

        agi += test.agi;

        intel += test.intel;

        return *this;

    }

};
int main(){

    Love boy ,girl(10,20,30);

    boy += girl;

    cout << boy.str << boy.agi << boy.intel << endl;

    return 0;

}

在类外面重载+号

class Love{

public:

    int str;

    int agi;

    int intel;



    Love(): str(0), agi(0) , intel(0){}

    Love(int a , int b ,int c): str(a), agi(b) , intel(c){};

};

//为了与内置操作符保持一致,加法返回一个右值,而不是引用

Love operator+(const Love &fir, const Love &sec){

    Love ans;

    ans.str = fir.str + sec.str ;

    ans.agi = fir.agi + sec.agi ;

    ans.intel = fir.intel + sec.intel;

    return ans;

}

在类外面的输入输出操作符

为什么IO操作符必须为非成员函数?

因为做操作数只能是该类类型的对象

比如 Love item;

      item << cout ;

由于IO操作符通常对非公用数据成员进行读写,所以通常将IO操作符

设定为友元

class Love{

public:

    int str;

    int agi;

    int intel;



    Love(): str(0), agi(0) , intel(0){}

    Love(int a , int b ,int c): str(a), agi(b) , intel(c){};

    friend istream& operator>>

            (istream& , Love&);

    friend ostream& operator<<

            (ostream& , const Love&);

};

//要有处理错误和文件结尾的措施

istream& operator>>(istream& in, Love &s){

        in >> s.str >> s.agi >> s.intel;

        if( !in )

            Love(0,0,0);

        return in;

}


ostream&

operator<<(ostream& out ,const Love &s){

    out << "str:=" << s.str << " agi:="

        << s.agi << " Int:=" << s.intel;

    return out;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值