简单说说c++ 中操作符重载,什么情况返回引用等

来源:互联网 发布:知乎 专辑 编辑:程序博客网 时间:2024/05/16 05:15

~~~~我的生活,我的点点滴滴!!

这里就拿两个例子来说明,什么时候需要返回引用,什么时候不需要,然后对于c++输入输出流那是必须返回引用的


操作符号:

“+” 对于 加 操作(在类外定义)不需要返回引用,只需要返回一个右值就行了,看下面的伪代码

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; } 


“+=” 对于 加等 操作(必须在类里面定义) 

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

赋值必须返回*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; } 

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

为什么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
原创粉丝点击