c++ - 如何访问标准库算法中的类私有成员?C++
问题描述
如何在不破坏封装的情况下获得标准库算法中的私有或受保护成员?是否可以friend classes
用于获取私有或受保护成员?代码如下所示。
class Person
{
private:
double score;
std::string name;
public:
Person(std::string name, double score)
{
this->score = score;
this->name = name;
}
bool operator()(const Person& obj) const
{
return obj.score > 180;
}
bool operator <(const Person& obj) const
{
return name < obj.name;
}
};
int main()
{
std::vector<Person> person
{
Person("John",200),
Person("Trump",204),
Person("Biden",205),
Person("Obama",170),
Person("Sam",180)
};
std::string Fname = "Sam";
auto res3 = find_if(person.begin(), person.end(), [&Fname](const Person &p)
{
return p.name == Fname;
});
}
解决方案
只需在类定义中添加一个简单的“getter”:
const std::string& getName() const { return name; }
然后后来:
return p.getName() == Fname;
对于更复杂的情况,您可以使用friend
另一个类或函数。您还可以定义operator==
将该对象与字符串进行比较,这可能更容易,就像您可以做的那样p == Fname
。