C++ 我自己的 class 谓词不起作用
C++ my own class predicate is not working
我是 C++ 的新手。我想创建自己的谓词。但是 bool 运算符的部分似乎是错误的(至少在我看来是这样)。有人可以给我提示吗?我不想改变这个想法的整体结构,我只是确定我不了解有关 operator () 实现的一些细节或与 c++ 中的 类 相关的内容。
#include <iostream>
#include <vector>
class Predicate
{
private:
int number = 0;
public:
Predicate() = default;
Predicate(const int number)
{
this->number = number;
}
bool operator()(int value) const
{
Predicate *pred = new Predicate();
bool result = pred->operator()(value);
return result;
}
};
class Even : public Predicate
{
bool operator()(int value) const
{
return value % 2 == 0;
}
};
class Negative : public Predicate
{
bool operator()(int value) const
{
return value < 0;
}
};
int count(const std::vector<int> &elements, const Predicate &predicate)
{
int count = 0;
for (int index = 0; index < elements.size(); ++index)
{
if (predicate(elements[index]))
{
++count;
}
}
return count;
}
int main()
{
const std::vector<int> elements{-7, 12, -11, 2, 9, -4, -6, 5, 23, -1};
std::cout << count(elements, Even()) << " " << count(elements, Negative()) << std::endl;
}
您需要的是:
- 定义
Predicate
为抽象类型,
- 实现了它的不同版本。
Predicate
作为抽象类型:
class Predicate {
public:
virtual bool operator(int v) const = 0;
};
实施(实现)给定的 Predicate
:
class IsNegative : public Predicate { // means IsNegatives are Predicates
public:
virtual bool operator(int v) const { return v<0; } // realisation of the operator
};
我是 C++ 的新手。我想创建自己的谓词。但是 bool 运算符的部分似乎是错误的(至少在我看来是这样)。有人可以给我提示吗?我不想改变这个想法的整体结构,我只是确定我不了解有关 operator () 实现的一些细节或与 c++ 中的 类 相关的内容。
#include <iostream>
#include <vector>
class Predicate
{
private:
int number = 0;
public:
Predicate() = default;
Predicate(const int number)
{
this->number = number;
}
bool operator()(int value) const
{
Predicate *pred = new Predicate();
bool result = pred->operator()(value);
return result;
}
};
class Even : public Predicate
{
bool operator()(int value) const
{
return value % 2 == 0;
}
};
class Negative : public Predicate
{
bool operator()(int value) const
{
return value < 0;
}
};
int count(const std::vector<int> &elements, const Predicate &predicate)
{
int count = 0;
for (int index = 0; index < elements.size(); ++index)
{
if (predicate(elements[index]))
{
++count;
}
}
return count;
}
int main()
{
const std::vector<int> elements{-7, 12, -11, 2, 9, -4, -6, 5, 23, -1};
std::cout << count(elements, Even()) << " " << count(elements, Negative()) << std::endl;
}
您需要的是:
- 定义
Predicate
为抽象类型, - 实现了它的不同版本。
Predicate
作为抽象类型:
class Predicate {
public:
virtual bool operator(int v) const = 0;
};
实施(实现)给定的 Predicate
:
class IsNegative : public Predicate { // means IsNegatives are Predicates
public:
virtual bool operator(int v) const { return v<0; } // realisation of the operator
};