函数对象常用在stl的算法中用于特殊的匹配定制功能。
先执行构造函数在执行重载函数
函数对象常用在stl的算法中用于特殊的匹配定制功能。
先执行构造函数在执行重载函数
1.重载运算符的函数一般格式如下
{對运算符的重载处理}
例如想将“+”用于Complex(复数)的加法运算,函数的原型可以是这样的:
operator函数+函数表示对运算符+重载 其中,operator函数是关鍵字专门用于定义重载运算符的函数的,运算符名称就是C++提供给用户的预定运算符
注意:函数名是由operator函数和运算符组成。
2.两个形参是Complex類对象的引用要求实参为Complex类对象。
操作符重载实现为非类成员函数(全局函数)
对于全局重载操作符,玳表左操作数的参数必须被显式指定
运算符重载函数operator函数 +还可以改写的更简练一些:
在建立临时对象过程中,调用构造函数return语句将此臨时对象作为函数返回值。
那么我们将+运算符进行了重载以后,可否将一个常量和一个复数相加呢比如:
例如,运算符+被重载以后仍然可以用于int,floatdouble,char类型数据的运算同时又增加了用于定义时数据类型的相加的功能。
编译系统根据表达式的上下文即根据运算符两侧(如果是单目运算符則为一侧)的数据类型决定的。
如对于3+5,则执行整数加法;对于3.4+5.45则执行双精度数加法;对于两个复数类相加,则执行复数加法
3.如何決定把一个操作符重载为类成员函数还是全局名字空间的成员呢?①如果一个重载操作符是类成员那么只有当与他一起使用的左操作数昰该类的对象时,该操作符才会被调用如果该操作符的左操作数必须是其他的类型,则操作符必须被重载为全局名字空间的成员
②C++要求赋值=,下标[]调用(), 和成员指向->操作符必须被定义为类成员操作符任何把这些操作符定义为名字空间成员的定义都会被标记为编译时刻错误。
③如果有一个操作数是类类型如string类的情形那么对于对称操作符比如等于操作符最好定义为全局名字空间成员