- 重载后的使用方式相当灵活,没有固定写法,什么返回值,传入类型的什么都很灵活。
- 由于重载后的使用方式非常像函数的调用,因此称为仿函数。
#include<iostream>
#include<string>
using namespace std;
class person {
public:
person() {};
int *m_A=NULL;
person(int a) {
m_A = new int(a);
}
~person() {
if (m_A != NULL) {
delete m_A;
m_A = NULL;
}
}
//()括号的重载,相当灵活
person &operator()(string str, person &p) {
//函数体里写什么都行,相当灵活
cout << str << endl << *p.m_A<< endl;
return p;
}
};
//函数调用时的书写格式
void fun(string str, person& p) {
cout << str << endl << *p.m_A << endl;
}
int main() {
person p(100);
person ()("龙少牛通", p); //1.调用类的()重载函数,建立一个匿名对象来调用
person p1(10); p1 ("龙少牛通", p);//2.调用类的()重载函数,建一个新对象来调用,这种调用也是最像函数调用的那个方式
fun("龙少牛通", p);//3.调用构造函数
}
由上面的程序不难看出,()的重载调用格式有两种,一种是构建一个匿名对象直接调用,调用完清除。一种是建个新对象去调用