一、括号 () 运算符重载
1、括号 () 运算符介绍
使用类定义对象 ,
代码语言:javascript复制Student s;
对 对象 s 使用 括号运算符 , 并在括号中 输入 两个值 ,
代码语言:javascript复制s(10, 20)
上述写法 , 与函数调用很像 , 只是 s 不是函数名 , 而是一个 对象的 名称 ;
该 括号 () 操作符 被重载了 ;
注意分区 下面 3 种情况 :
s(10, 20)
括号运算符重载 ;Student s(10, 20)
构造函数调用 ;s.add(1, 2)
正常的函数调用 , 调用 s 对象中的 add 函数 ;
2、括号 () 运算符重载
使用 成员函数 实现 等于判断 == 运算符重载 :
- 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载的运算符 ,
Student s;
先声明对象 s , 之后在 s 的基础上使用 括号 () 操作符 ;- 使用时用法为
s(10, 20)
; - 函数名是
operator()
;
operator()
- 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
- 括号运算符 使用时用法为 s(10, 20) ;
- 左操作数 : 其中 左操作数 是 s , 这里通过 this 指针调用 , 不需要声明在参数中 ;
- 若干右操作数 : 右操作数 是 10, 20 ; 该操作数需要声明在参数中 , 注意 普通数据类型 直接声明 , 对象数据类型 需要声明 为 引用类型 ;
- 上述两个是对象类型 , 对象一般传入 指针 或 引用 , 由于是基础数据类型 , 这里传入基础数据类型 ; 如果是 对象类型 , 则传入引用 ;
operator()(int a, int b)
- 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 ;
- 此处返回值根据需求即可 ;
int operator()(int a, int b)
- 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
// 重载 括号 () 运算符
int operator()(int a, int b)
{
return a b;
};
二、完整代码示例
1、Test.cpp 测试类
下面的 Student 类的 括号 () 运算符被重载了 , 可以通过 Student 实例对象调用 括号 运算符 ;
代码语言:javascript复制#include "iostream"
using namespace std;
class Student
{
public:
// 重载 括号 () 运算符
int operator()(int a, int b)
{
return a b;
};
// 正常的函数
int add(int a, int b)
{
return a b;
};
};
int main() {
Student s;
// 调用 括号 运算符
cout << "s(1, 2) = " << s(1, 2) << endl;
// 正常的函数调用
int a = s.add(1, 2);
cout << "s.add(1, 2) = " << s.add(1, 2) << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
4、执行结果
执行结果 :
代码语言:javascript复制s(1, 2) = 3
s.add(1, 2) = 3
请按任意键继续. . .