C++运算符重载
1.1什么是运算符重载?
和函数重载一样,运算符也可以重载,运算符重载的本质就是函数重载。
1.2运算符重载的举例。
“<<”是C++位运算符中的位移运算符,但又是流对象cout配合使用的流插入运算符,“>>”是流对象cin配合使用的流提取运算符。
1.3运算符重载的方法是定义一个重载运算符函数。
1.4重载运算符函数的一般格式如下:
函数类型 operator 运算符名称(形参表列)
{对运算符的重载处理}
如:Complex Complex::operator + (Complex &c2){return Complex(real+c2.real,imag+c2.imag);}
1.5定义了重载运算符的函数后,可以说:函数operator+重载了运算符+。
C++重载运算符的规则
1.1 C++不允许用户自己定义新的运算符,只能对已有的C++运算符重载。
1.2 C++不允许重载的运算符(5个)。
A. . (成员运算符)
B. .* (成员指针访问运算符)
C. :: (域运算符)
D. sizeof (长度运算符)
F. ?: (条件运算符)
A,B不能重载是为了保证访问成员的功能不被改变。
C,D不能重载是因为域运算符和sizeof的运算对象是类型而不是一般的变量和表达式。
1.3重载不能改变运算符运算对象的个数。
1.4重载不能改变运算符的优先级。
1.5重载不能改变运算符的结合性。
1.6重载运算符的函数不能有默认的参数。
1.7重载运算符必须和用户定义的自定义类型对象一起使用,其参数至少有一个是类对象(或类对象的引用).
如下面这样是不对的:
int operator + (int a,int b)
{
return (a-b);
}
如果有两个参数,这两个参数可以都是类对象,也可以一个是类对象,一个是c++标准类型的数据。如:
Complex operator + (int a,Complex &c)
{
return Complex(a+c.real,c.imag);
}
1.8用于类对象的运算符一般必须重载,但有两个例外,运算符"="和“&”不必用户重载。
1.9应当使重载运算符的功能类似于该运算符作用与标准类型数据时所实现的功能。(如用"+"实现加法,用">"实现大于的功能)
2.0运算符重载的函数可以是类的成员函数,或者友元函数,或者是普通函数。