运算符重载:使自定义类型满足和内置类型相同的运算功能
C++语言支持函数重载,重载的底层实现是,C++编译器编译函数符号的时候,是根据函数名和形参的个数,类型来共同决定的,因此如果一组函数只是函数名相同,而参数列表不同的话,那么它们生成的符号也是不同的,就不会产生冲突了,编译过程中,函数生成的符号不同。在编译器编译时,根据调用点用户传入的实参,来选择一个类型最为匹配的函数重载版本进行调用,这一切都是在编译过程中确定的。
运算符重载的要求:
1.不能改变运算符的优先级
2.满足和内置类型相同的逻辑
3.不能创造新的运算符
class Test
{
public:
Test(int a, int b) :ma(a), mb(b){}
const Test operator+(const Test& left) //'+'号运算符的重载
{
return Test(ma + left.ma, mb + left.mb);
}
private:
int ma;
int mb;
};
int main()
{
int a = 10;
int b = 20;
int c = a + b;Test test1(10, 20);
Test test2(30, 40);
Test test3 = test1 + test2;
return 0;
}可重载的运算符列表:
双目算术运算符 + (加),-(减),*(乘),/(除),% (取模) 关系运算符 ==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于) 逻辑运算符 ||(逻辑或),&&(逻辑与),!(逻辑非) 单目运算符 + (正),-(负),*(指针),&(取地址) 自增自减运算符 ++(自增),--(自减) 位运算符 | (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移) 赋值运算符 =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>= 空间申请与释放 new, delete, new[ ] , delete[] 其他运算符 ()(函数调用),->(成员访问),,(逗号),[](下标) 不可重载的运算符列表:
. 成员访问运算符 .*, ->* 成员指针访问运算符 :: 域运算符 sizeof 长度运算符 ?:: 条件运算符 #: 预处理符号