类内重载运算符的函数,是全局函数,还是静态成员函数的问题
代码#include<iostream>
using namespace std;
#include <functional>
#include<vector>
#include<algorithm>
class V {
public:
vector<int>v;
public:
void creat() {
for (int i = 0; i < 10; i++) {
v.push_back(i);
}
cout << endl;
sort(v.begin(),v.end(),cmp);
sort(v.begin(), v.end(), V());
for (auto i : v) {
cout << i << " ";
}
cout << endl;
}
bool operator()(const int v1,const int v2) {
return v1 > v2;
}
boolstatic cmp(const int v1, const int v2) {
return v1 > v2;
}
};
bool cmp1(const int v1, const int v2) {
return v1 > v2;
}
void test01()
{
V v;
v.creat();
}
void test02()
{
vector<int>v;
for (int i = 0; i < 10;i++) {
v.push_back(i);
}
cout << endl;
sort(v.begin(),v.end(),cmp1);
for (auto i : v) {
cout << i << " ";
}
cout << endl;
}
int main() {
test01();
test02();
return 0;
}
sort的compare函数要定义为全局或者成员静态函数才可以调用,当我在类内调用
sort(v.begin(),v.end(),cmp);
sort(v.begin(), v.end(), V());
两个函数的时候,cmp和V()都可以实现
我可不可以认为
bool operator()(const int v1,const int v2) {
return v1 > v2;
}
这个重载函数就是静态成员函数呢,还是全局函数?
sort函数的第2个参数要求是一个可调用的对象
这可以是一个匿名函数,也可以是命名的函数,还可以是一个有operator()的类对象
bool operator()(const int v1,const int v2)
这个应该不是重载函数吧,这个是成员函数,不是静态的
下面是一个关于可调用对象的例子
sh-5.1$ cat main.cpp
#include <iostream>
#include <functional>
bool func(int a, int b, std::function<bool (int a, int b)> f) {
return f(a, b);
}
bool equal(int a, int b) {return a == b;}
class less_t {
public:
bool operator()(int a, int b) {return a < b;}
};
int main() {
std::cout << func(1, 2, [](int a, int b) {return a > b;}) << std::endl;
std::cout << func(1, 2, equal) << std::endl;
std::cout << func(1, 1, equal) << std::endl;
std::cout << func(1, 2, less_t()) << std::endl;
std::cout << less_t()(1, 2) << std::endl;
std::cout << less_t()(2, 1) << std::endl;
return 0;
}
sh-5.1$ ./main
0
0
1
1
1
0
sh-5.1$
bool operator()(const int v1,const int v2)
我想起来了,这玩意叫运算符重载,是重载函数 人造人 发表于 2023-2-22 08:52
bool operator()(const int v1,const int v2)
我想起来了,这玩意叫运算符重载,是重载函数
sort(v.begin(), v.end(), V());
可以是一个有operator()的类对象,可不可以认为是调用了一个匿名的函数对象V(),这个函数对象就是一个全局的类对象? 这是匿名对象,是局部的匿名对象
页:
[1]