文章概述
- 运算符重载出现的原因
- 运算符重载的定义以及好处
- 运算符重载的本质
- 运算符重载的语法
- 使用成员或者友元函数重载运算符的特点
运算符重载出现的原因
C++编译器知道内置类型如何进行计算,但是默认情况下不知道自定义数据类型是如何进行计算的。C++编译器为程序员提供了一种机制让自定义数据类型有机会进行运算符操作。这种机制就是运算符重载。
运算符重载的定义以及好处
a. 运算符重载的定义: 重新赋予运算符新的含义。
b. 运算符重载的好处: 使用户自定义的数据以一种更简洁的方式工作。
c. 运算符中不能重载的运算符:
. :: .* ?: sizeof
运算符重载的本质
a. 运算符重载的本质: 函数;
b. 运算符重载的实现机制: 根据operator+表示了重载了加号运算符。C++编译器会根据类型(a+b)去寻找成员函数或者全局函数,看有没有相加的函数。如果程序员写了(相当于程序员按照C++编译器提供的机制实现自定义的函数)C++编译器会自动的调用这个函数(Test operator+(Test& a))。
Test operator+(Test& a)
{
}
Test a,b;
Test c = a+b;
c. 重载运算符函数可以对运算符作出新的解释,但是原有的基本语意保持不变。
- 不改变运算符的优先级
- 不改变运算符的结和性
- 不改变运算符所需要的操作数
- 不能创建新的运算符
运算符重载的语法
a. 运算符重载函数是一种特殊的成员函数或者友元函数。
b. 运算符重载的语法格式:
返回值类型 类名::operator op(参数列表)
{
}
operator op 相当于函数名; op表示的是运算符;
以成员函数和友元函数完成运算符重载的实例:
//友元函数完成运算符重载
Test operator + (Test& a,Test& b);
//成员函数完成运算符重载
Test operator + (Test& b);
使用成员或者友元函数重载运算符的特点
a. 运算符函数可以重载为成员函数或者友元函数;
b. 成员函数和友元函数关键在于: 成员函数具有this指针,友元函数没有this指针;
c. 不管成员函数和友元函数,运算符重载使用方法相同,但是传递的参数不同,实现代码不同,应用场景不同。(一般情况使用成员函数,不能访问类的内部使用友元函数)