C++操作符重载

C++操作符重载

1在类中重载+=操作符

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

赋值必须返回*this 的引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}

在类外面重载+号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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操作符

设定为友元

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值