目录:
应用场景:
class MyInteger {
public:
MyInteger() {
m_A = 0;
}
private:
int m_A;
}
=================================
实现以下效果
MyInteger i;
cout << i << endl;// 打印0
cout << ++i << endl;// 前置递增:打印1
cout << i++ << endl;// 后置递增:打印1
cout << i << endl;// 打印2
实现递增运算符重载:
class MyInteger {
friend ostream& operator<< (ostream& cout, MyInteger i);
public:
MyInteger(int i) {
m_A = i;
}
//前置递增运算符重载
MyInteger& operator++() {
++m_A;
return *this;
}
//后置递增运算符重载
MyInteger operator++(int) {
//先记录当时结果
MyInteger temp = *this;
//实现递增
this->m_A++;
//返回之前记录的结果
return temp;
}
private:
int m_A;
};
ostream& operator<< (ostream& cout, MyInteger i) {
cout << i.m_A;
return cout;
}
void main() {
MyInteger i(10);
cout << ++i << endl; //11
cout << i++ << endl; //11
cout << i << endl; //12
}
我们来看一下其中主要的代码:
- 前置递增运算符重载
MyInteger& operator++() {
m_A++;
return *this;
}
- 后置递增运算符重载
//这里的int代表占位参数,可以用来区分前置递增和后置递增
MyInteger operator++(int) {
//先记录当时结果
MyInteger temp = *this;
//实现递增
m_A++;
//返回之前记录的结果
return temp;
}
两者的主要区别:
- 前置递增运算符重载函数返回值是当前对象的引用
- 后置递增运算符重载函数返回值是一个新的对象
- 后置递增运算符重载函数有一个int占位参数,用与区别与前置递增
以上代码还实现了左移运算符重载:
ostream& operator<< (ostream& cout, MyInteger i) {
cout << i.m_A;
return cout;
}
关于左移运算符重载的详细介绍请看:运算符重载——左移运算符重载