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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)