【C++】运算符重载 ⑬ ( 括号 () 运算符重载 | 完整代码示例 )

2023-10-15 17:30:15 浏览数 (1)

一、括号 () 运算符重载

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() ;
代码语言:javascript复制
operator()
  • 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
    • 括号运算符 使用时用法为 s(10, 20) ;
    • 左操作数 : 其中 左操作数 是 s , 这里通过 this 指针调用 , 不需要声明在参数中 ;
    • 若干右操作数 : 右操作数 是 10, 20 ; 该操作数需要声明在参数中 , 注意 普通数据类型 直接声明 , 对象数据类型 需要声明 为 引用类型 ;
    • 上述两个是对象类型 , 对象一般传入 指针 或 引用 , 由于是基础数据类型 , 这里传入基础数据类型 ; 如果是 对象类型 , 则传入引用 ;
代码语言:javascript复制
operator()(int a, int b)
  • 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 ;
    • 此处返回值根据需求即可 ;
代码语言:javascript复制
int operator()(int a, int b)
  • 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
代码语言:javascript复制
	// 重载 括号 () 运算符
	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
请按任意键继续. . .

0 人点赞