C++理论复习之运算符重载
来源:互联网 发布:欢乐百世淘宝 编辑:程序博客网 时间:2024/05/17 04:05
C++运算符重载
重载操作符的一般格式:
Type operator+(Type A,Type B)
可重载与不可重载的操作符列表:
操作符重载的注意事项
重载操作符必须有一个类类型的操作数,不能重载内置类型对象的操作符;
重载操作符不改变原来操作符的优先级;
重载操作符不保证操作数的求职顺序;如重载&&或||运算符后操作符两边的表达式都会求值且顺序不一定是从左向右;
重载操作符可能可以定义为成员函数或非成员函数,定义为非成员函数时要定义为友元函数,要看具体的运算符;
使用操作符重载有两种选择,一种是和调用成员函数一样的格式,另一种是和操作符的使用格式相同;
cout<<item+item2<<endl;cout<<Operator+(item1,item2)<<endl;
有些操作符有内置含义,有需要是再重载,如赋值运算符,默认将一个类的成员变量赋给另一个类;取地址(&)和逗号运算符(,)和默认含义相同,重载&&或||会改变运算符的短路求值特性;
要做含义清晰的操作符重载,不要将+号重载为-号的功能,这样不易理解。
重载要将一些运算符作为整体都重载,比如重载>,也应将<,>=,<=,==都重载,否则在使用上会不符合常规的理解,但如果默写比较没有对应的含义,不定义更好;
选择成员函数和非成员函数的实现方式的一些指导原则:
赋值=,下标[],调用(),成员访问箭头-> 必须定义为成员;
改变对象状态的运算符一般定义为成员函数,如自增,自减;
对称的操作符一般定义为非成员函数;
重载输出操作符<<
格式
ostream& operator <<(ostream &os,const ClassType &object){ os<<.......; return os;}
或
ostream& operator <<(ostream &os, ClassType &object){ os<<.......; return os;}
有const参数的可以接受const类型的参数;
注意事项
IO操作必须是非成员函数,因为它的左操作数不是类类型;
输出操作应当尽量少的写格式字符,只输出内容,这样更符合正常的输出的功能;
重载输入操作符>>
格式
istream& operator>>(istream &in,ClassType & s){ in>>s.i>>s.k; if(in) {.....} else {.....}}
注意事项
和输出重载相同,也是非成员函数;
输入应当处理输入错误,比如输入流错误或是输入流正确,但输入内容不正确等;具体的处理的原则是保持数据的一致性,不能类中部分数据赋值了,但另一部分赋值失败了,可以在失败时将类用默认构造函数重新构造一遍,使其存储默认值
加号运算符+
ClassType operator+(const ClassType& lhs,const ClassType& rhs){ ClassType ret(lhs); ret+=rhs; return ret;}
加法运算符返回一个右值;
相等,不等运算符
inline operator ==(const Class_Type &A,Class_Type B){ return bool;}
或
inline operator !=(const Class_Type &A,Class_Type B){ return bool;}
- C++理论复习之运算符重载
- c++复习之重载运算符
- 【C++】C++大数之运算符重载
- 【C++】之【运算符重载函数】
- 运算符的重载(理论篇)
- C语言之重载运算符()/[]/++/->等运算符
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- android 相机的扫码以及生成二维码
- Java中常用字符串方法总结
- Timer小记
- mtd mdd
- 分享nginx做代理的一份配置
- C++理论复习之运算符重载
- log4net的使用
- 线程同步的几种方法的总结
- java时间
- android 一些重要文件记录
- R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(二,textreuse介绍)
- log4j的使用
- IDEA和git整合问题
- my self for beihang authenticate url