#include <iostream>
//函数重载就是对一个已有的函数赋予新的含义,
//使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”
//操作符重载是C++的强大特性之一
//操作符重载的本质是通过函数扩展操作符的语义
//operator关键字是操作符重载的关键
//friend关键字可以对函数或类开发访问权限
//操作符重载遵循函数重载的规则
//操作符重载可以直接使用类的成员函数实现
//=, [], ()和->操作符只能通过成员函数进行重载
//++操作符通过一个int参数进行前置与后置的重载
//C++中不要重载&&和||操作符
class Test{
public:
Test(){
}
Test(int a, int b){
this->a = a;
this->b = b;
}
friend Test operator+(Test &t1, Test &t2);
Test operator-(Test &t1);
Test& operator++(); //前置++
Test& operator--(int); //后置--
void getAB(){
printf("a: %d b: %d\n", a, b);
}
private:
int a;
int b;
};
Test operator+(Test &t1, Test &t2){
return Test(t1.a+t2.a, t1.b+t2.b);
}
Test Test::operator-(Test &t1){
return Test(a-t1.a, b-t1.b);
}
//前置++操作符
Test& Test::operator++(){
return Test(++a, ++b);
}
//后置--
Test& Test::operator--(int){
return Test(a--, b--);
}
void playAdd(){
printf("playAdd\n");
Test t1(1, 2);
Test t2(3, 4);
Test t3;
t3 = t1 + t2;
t1.getAB();
t2.getAB();
t3.getAB();
}
void playMinus(){
printf("playMinus\n");
Test t1(1, 2);
Test t2(3, 4);
Test t3;
t3 = t1 - t2;
t1.getAB();
t2.getAB();
t3.getAB();
}
//通过一个占位参数来区分前置运算和后置运算
void playPadd(){
printf("playPadd\n");
Test t1(1, 2);
++t1;
t1.getAB();
}
void playEminus(){
printf("playEminus\n");
Test t1(1, 2);
t1--;
t1.getAB();
}
int main()
{
playAdd();
playMinus();
playPadd();
playEminus();
getchar();
return 0;
}