重载括号运算符复习
/*
括号运算符()也可以重载,对象名可以当成函数来使用(函数对象、仿函数)
注意:
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("我是一只小包西。");
/* 结果:
普通函数:我是一只傻傻鸟。
重载函数:我是一只小包西。
*/
}
文章介绍了C++中如何重载括号运算符,使其可以像函数一样使用,创建函数对象。函数对象可以存储额外信息并用于STL。当函数对象与全局函数同名时,通过作用域规则选择调用。示例代码展示了括号运算符重载的使用和调用全局函数的方法。

3450

被折叠的 条评论
为什么被折叠?



