18.2如何重载运算符例18-2:改变操作数个数导致编译器错误class A1public:A(inta)()Aoperator*(A&x,A&y,A&z)//错误:试图带3个参数:
例18-2:改变操作数个数导致编译器错误 class A { public: A ( int a ) { } A operator * ( A & x, A & y, A & z ) //错误: 试图带3个参数 { //. } } ;
18.2 #如何重载运算符3、操作数类型规定运算符是函数除了运算顺序和优先级不能更改外。参数和返回类型是可以重新说明的,即可以重载
3、操作数类型规定 • 运算符是函数。 • 除了运算顺序和优先级不能更改外。 • 参数和返回类型是可以重新说明的,即可以 重载
18.2 #如何重载运算符·定义一个重载的运算符是这个函数的名字必须以operator开头运算符重载函数的一般形式为:类型类名::operator重载的运算符(参数列表)[相关操作;1
• 定义一个重载的运算符是这个函数的名字必 须以operator开头。 • 运算符重载函数的一般形式为: 类型 类名::operator 重载的运算符(参数列表) { 相关操作; }
18.2如何重载运算符·它的参数个数由以下两个因素决定:V(1)该操作符是一元操作符还是二元操作符。(2)它是被定义为全局函数还是一个成员函数。如果是全局函数,那么于一元操作符它的参数个数(后置++、一一除外),二元操作符的参数个数就是1个是2个。如果是成员函数,那么对于一元操作符的参数个数为0,二元操作符的参数个数为1这是由于该类本身也作为一个操作数参与计算,所以成员函数的参数要比全局函数的参数个数少1
• 它的参数个数由以下两个因素决定: ✓ (1) 该操作符是一元操作符还是二元操作符。 ✓ (2) 它是被定义为全局函数还是一个成员函数。 如果是全局函数,那么于一元操作符它的参数个数 就是1个(后置++、-除外),二元操作符的参数个数 是2个。 如果是成员函数,那么对于一元操作符的参数个数 为0,二元操作符的参数个数为1。 这是由于该类本身也作为一个操作数参与计算,所 以成员函数的参数要比全局函数的参数个数少1
18.2如何重载运算符注意:、1、运算符重载是一种函数重载:·2、运算符重载对参数个数有限制例:双目运算符的重载有且只有一个参数(右操作数),左操作数为对象本身。例:(1)/加法左操作数+右操作数(2)左操作数 = 右操作数//赋值3、重载运算符的优先级与结合性保持与原始运算符相同
注意: • 1、运算符重载是一种函数重载; • 2、运算符重载对参数个数有限制 例:双目运算符的重载有且只有一个参数(右操作 数),左操作数为对象本身。 例: (1) 左操作数 + 右操作数 //加法 (2) 左操作数 = 右操作数 //赋值 • 3、重载运算符的优先级与结合性保持与原始运 算符相同