可以使用操作符,操作非默认类型的操作数。
让同样的操作符执行不同的操作(操作其他类型的操作数),称为操作符重载。
函数重载:用同样的函数,操作不同类型的形参。
操作符的重载不是自动的。如:Point + Point//没有定义对Point类的+运算。
1、 只能重载已经存在的操作符(与函数重载不同),不能创造一个新操作符。2、操作数的数目也应和原始定义一致 。1+2;Point + Point
3、至少有一个操作数,是用户自定义类型(Class)
4、 不能重载的4个操作符
:: scope resolution operator
. object member selection
.* pointer to member obj.*member//这三个都是指定对象的成员的
?:(:? error) conditional expression
sizeof()
5、操作符重载后,也可以根据操作数的类型,选择与之匹配的操作符版本。
Person + Person O.K. int + int // Point + Point
Person +int O.K.
int +int Not O.K sincethat would
redefinemeaning of addition
for primitives//不能对原生类型的运算做重定义
6、操作符重载后,优先级的顺序不变。
7、有三个操作符,不用重载,就可以用于所有类型的对象。
= the assignment operator but it should often be overloaded anyhow because of problems with dynamically allocated memory. (see later)
& Address operator &circle1 取地址
* De-referencing operator: a unary operator 解引用
Point p1;
Point p2 = p1;(浅拷贝赋值),
若对象有动态内存分配在堆空间上,还是需要重载赋值运算符。
8、重载操作符时,操作数类型可以不同。