目录
1. 介绍
c++中预定义的运算符操作对象只能时基本数据类型,实际上,对于很多用户自定义类型,也需要类似的运算操作。
例如
class complex
{
public:
complex(double r = 0.0, double I = 0.0)
{
real = r;
imag = I;
}
private:
double real;
double imag;
};
complex a(10, 20), b(5, 8);
“a + b”运算如何实现?这个时候就要使用运算符重载。
运算符重载:编写程序说明”+”在作用于complex类对象时,该实现什么样的功能。运算符重载就是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同的行为
运算符重载的实质是函数重载。在实现过程中,首先将指定的运算符表达式转换为对运算符函数的调用,运算对象转换为运算符的实参,然后根据实参的类型来确定需要调用达标函数,这个过程由编译过程完成。
2.运算符重载的规则
- c++中的运算符除了少数几个之外,全部可以重载,而且只能重载c++中已有的运算符。
- 重载之后运算符的优先级和结合性都不会改变
- 运算符重载用在对新型数据结构的运算过程中。重载的功能于原功能类似,不能改变原运算符的操作对象个数。
3.运算符重载的形式
3.1 重载为类的成员函数
类成员函数就是在类中定义一个成员函数来重载运算符
// 运算符重载为类的成员函数的一般语法形式
函数类型 operator 运算符 (形参表)
{
函数体;
}
示例
#include <iostrea>
using namespace std;
class Demo
{
public:
Demo(int a)
{
this->a = a;
}
// 类成员函数实现运算符重载
Demo& operator+ (int n)
{
this->a += n;
return *this;
}
int getA()
{
return a;
}
private:
int a;
};
int main()
{
Demo demo(1);
// 重载"+"运算符之后,对象可以直接加一个数
demo = demo + 2;
cout << demo.getA() << endl;
return 0;
}
3.2 重载为类的友元函数
// 运算符重载为类的友元函数的一般语法形式
friend 函数类型 operator运算符 (形参表)
{
函数体;
}