【C++入门】什么是运算符重载

文章目录

  • 一、基本概念
  • 二、使用规则
  • 三、特殊情况

一、基本概念

为了提高代码的可读性,C++ 引入了运算符重载。

运算符重载是有着特殊函数名的函数

函数名:operator + 要重载的运算符

例子:

// 类中的 < 运算符重载
bool operator<(const type& d)
{
	...
}

类中的运算符重载,参数个数比运算符操作数个数少 1,因为隐藏了函数的第一个参数 this 。

// 类中的 < 运算符重载
bool operator<(const type& d)
{
	...
}

// 编译器的处理
// 注意,this指向的是调用函数的对象,也就是左操作数
bool operator<(const type* this, const type& d)
{
	...
}

// 使用时
d1 < d2; // 等同于 d1.operator<(d2);

注意,运算符重载的参数顺序就是操作数顺序

另外,运算符重载支持函数重载
函数重载就是允许存在参数个数 / 类型 / 类型顺序不同的同名函数,具体可以参考这篇文章:传送门

二、使用规则

C++ 规定,不能重载作用于内置类型的运算符。
也就是说运算符重载的函数参数至少有一个是自定义类型(可以是隐藏的 this)。

C++ 规定,运算符重载的参数个数和运算符本身的操作数个数必须相等。
对于类中的运算符重载,因为隐藏了函数的第一个参数 this,看似参数个数比操作数个数少 1,实际上参数个数和操作数个数是相等的。

C++ 规定,有五个运算符不能重载:
::sizeof?:..*

三、特殊情况

运算符重载有一些特殊情况,比如重载++运算符时,如何区分前置++和后置++

为了区分前置++和后置++,语言规定:
前置++重载没有参数(实际有一个隐藏的this,因为++运算符目数是 1),后置++重载有一个 int 参数(仅占位,用于区分前置后置)。

// 前置++
type operator++();

// 后置++
type operator++(int);

重载--运算符时同理。

你可能感兴趣的:(C++入门,c++,开发语言)