C++之重载括号运算符

文章介绍了C++中如何重载括号运算符,使其可以像函数一样使用,创建函数对象。函数对象可以存储额外信息并用于STL。当函数对象与全局函数同名时,通过作用域规则选择调用。示例代码展示了括号运算符重载的使用和调用全局函数的方法。

重载括号运算符复习

/*
 括号运算符()也可以重载,对象名可以当成函数来使用(函数对象、仿函数)

   注意:
   1. 括号运算符必须以成员函数的形式进行重载。
   2. 括号运算符重载函数具备普通函数全部的特征。
   3. 如果函数对象与全局函数同名,按作用域规则选择调用的函数。(test02)

   函数对象的用途:
   1)表面像函数,部分场景中可以代替函数,在STL中得到广泛的应用;
   2)函数对象本质是类,可以用成员变量存放更多的信息;
   3)函数对象有自己的数据类型;
   4)可以提供继承体系。
   
   总的来讲,函数对象同时具备函数和对象的特点。 
*/

//test01-重载括号运算符的基本使用 
#include <iostream>
using namespace std;

//C++规定,括号运算符函数只能用类的成员函数重载,不能用全局函数。 

void show(string str)
{
	cout<<"普通函数:"<<str<<endl;
}

class CGirl
{
public:
	void operator()(string str)  //像超女表白的函数
	{
		cout<<"重载函数:"<<str<<endl;	
	} 
};

int main()
{
	show("我是一只傻傻鸟。");
	
	CGirl girl;
	girl("我是一只小包西。");  //把对象名作为函数来使用 
}

#endif


//test02-注意第3点 
#if 0
#include <iostream>
using namespace std;
void show(string str)
{
	cout<<"普通函数:"<<str<<endl;
}

class CGirl
{
public:
	void operator()(string str)  //像超女表白的函数
	{
		cout<<"重载函数:"<<str<<endl;	
	} 
};

int main()
{
	//test02-1 
//	show("我是一只傻傻鸟。");  //普通函数 
//	CGirl show;
//	show("我是一只小包西。");  //函数对象与全局函数重名了! 
	/* 结果: 
	   普通函数:我是一只傻傻鸟。
       重载函数:我是一只小包西。
	*/
	
	//test02-2
//	CGirl show;
//	show("我是一只傻傻鸟。"); 
//	show("我是一只小包西。"); 
	/* 结果: 
	   重载函数:我是一只傻傻鸟。
       重载函数:我是一只小包西。
	*/
	
	//test02-3 如果要调用全局函数如何操作
	CGirl show;
	::show("我是一只傻傻鸟。");  //加两个冒号调用全局函数 
	show("我是一只小包西。"); 
	/* 结果: 
	   普通函数:我是一只傻傻鸟。
       重载函数:我是一只小包西。
	*/ 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值