1. 基本运算符重载
这里以加法运算符重载为例,减法乘法除法等基本运算符重载原理是一样的。
比如我们想实现Person类中的两个实例化变量p1和p2中对应变量的相加操作,我们需要对加法运算符进行重载。
类的定义如下:
class Person {
public:int a;int b;
};
重载代码:
Person operator+(Person& p1, Person& p2) {Person temp;temp.a = p1.a + p2.a;temp.b = p1.b + p2.b;return temp;
}
根据需求自行实现各种形式的重载函数即可,关键是使用operator关键字
2. 左移运算符重载
使用cout输出时,往往需要指定输出的对象,比如指定输出某个类中的某个变量,但若想一次性输出该类中的所有变量,则需要对左移运算符(<<)重载
用(1)中的案例,假设Person类中有a和b两个int元素,我们想一次性输出他们,则对cout的<<运算符进行重载
ostream& operator << (ostream& cout, Person p) {cout << "a = " << p.a << " " << "b = " << p.b;return cout;
}
需要注意的是cout函数返回对象是输出流ostream
3. 递增运算符重载
(1)前置递增的重载(++a)
假设我们的功能是让Person类中的a和b变量自增1,则重载如下
Person& operator++ (Person& p) { // ++ap.a++;p.b++;return p;
}
需要注意的是前置递增重载时返回的是引用类型,因为如果返回一般类型,则导致p中的a和b在内存中的实际值未被修改
(2)后置递增的重载(a++)
Person operator ++ (Person& p,int) { // a++Person temp;temp.a = p.a;temp.b = p.b;p.a++;p.b++;return temp;
}
注意:
(i)函数参数中的int是占位符,固定写法,让编译器知道这个是重载后置的递增运算符
(ii)返回类型是普通类型而并非引用类型,因为我们的返回对象是temp,是一个局部对象,而当该函数执行完之后局部对象就已经被释放了,这个时候再返回引用相当于是一个空引用,是非法的。