繁体   English   中英

如何在标准库算法中访问类私有成员? C++

[英]How to access class private member in standard library algorithms? 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM