简单说说c++ 中操作符重载,什么情况返回引用等
2014-05-24 15:35
134 查看
~~~~我的生活,我的点点滴滴!!
这里就拿两个例子来说明,什么时候需要返回引用,什么时候不需要,然后对于c++输入输出流那是必须返回引用的
操作符号:
“+” 对于 加 操作(在类外定义)不需要返回引用,只需要返回一个右值就行了,看下面的伪代码
“+=” 对于 加等 操作(必须在类里面定义)
赋值操作符必须定义为成员函数,无论形参为何种类型
赋值必须返回*this 的引用
因为做操作数只能是该类类型的对象
比如 Love item;
item << cout ;
由于IO操作符通常对非公用数据成员进行读写,所以通常将IO操作符
设定为友元
这里就拿两个例子来说明,什么时候需要返回引用,什么时候不需要,然后对于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; }
一般来说, 左右对称的操作符比如 +, -, *, /, <, >, ==之类的习惯上定义在外面. 而像左边必须是类类型的操作符, 比如赋值, 自加, 自减, [], ->, (), 等必须定义在类的内部
相关文章推荐
- C++函数返回值的特殊情况(返回引用、非引用、引用左值)
- 函数的返回类型可以为值、指针、引用,这三种返回类型有什么不同,各有什么好处?(c++)
- 12-4-19关于c++动态的概念 | 返回引用的情况
- c/c++: c++函数返回类型什么情况带const
- C++函数返回引用的情况说明
- C++之返回值为reference引用的情况---补充(6)《Effective C++》
- 关于C++中函数返回引用的讨论
- C++返回引用类型 指针的引用
- 常量函数、常量引用参数、常量引用返回值[C++]
- C++引用的本质究竟是什么? (探索c++的底层机制)
- 同志们给我说说什么意思啊 简单的 虽然代码多点儿呵呵.....
- 在什么情况下使用 c++ member initialization list
- Effective C++ 学习笔记:让operator=返回*this的引用
- c++对象成员函数返回自身引用时出现的诡异问题及解决办法
- c++函数返回引用
- 转载:C++中引用的本质是什么?
- 关于C++中函数返回引用的讨论
- C++引用的本质究竟是什么? (探索c++的底层机制)
- 常量函数、常量引用参数、常量引用返回值[C++]
- 关于C++中函数返回引用的讨论