C++运算符重载,主要需要注意流运算符一般是通过友元函数来实现重载,这是因为如果通过成员函数重载,那么对象是在<<或>>的左边,不仅很奇怪,而且无法实现连续调用形式。
运算符重载
不能重载的运算符
. .* :: ?: sizeof
只能作为类成员函数重载
() [] -> =
构造一个类
1 | class Book{ |
下标的重载
1 | class Book{ |
流运算符重载
- 流运算符只能重载为普通函数,不能重载为成员函数,重载为成员函数需要<<或者>>左侧的对象是我们定义的对象,这样就造成了Object<<cin或者Object>>cout的使用,与常规调用方法不符合,因此一般只重载为普通函数。
- 重载为一般函数时如果要访问private成员则需要定义为类的友元。
上述的Book类进行流运算符重载
1 | class Book{ |
单目运算符重载
自增运算符/自减运算符 分别重载为类成员函数 和 普通函数
两种形式都能定义,但是类成员和普通成员函数只能定义一种,否则调用时含义不明
同时能发现对于后置运算符,需要定义拷贝构造函数和拷贝赋值运算符
1 |
|
双目运算符重载
同时实现成员函数和友元函数,会优先调用成员函数
1 | class Book{ |