C++:重载函数运算符

编写一个类似PrintString的类,令其从istream中读取一行输入,然后返回一个表示我们所读内容的string。如果读取失败,返回空string

class PrintString{
public:
    PrintString(std::istream &i = std::cin) :is(i){}
    std::string  operator()()const;
private:
    std::istream &is; //std::istream is错误,不能将引用赋值给一个对象,因为引用不是对象,只是别名,可以将引用赋值给引用,将对象赋值给引用;
    //std::string s;
};
inline std::string PrintString::operator()()const
{
    std::string s; 
    std::getline(is, s); //为什么这样写报错呢?因为传过来的this指针为常量指针,故this->is和this->s都为常量,getline(is,s)函数无法修改is和s,getline只接受非常量对象
    if (is.good())
        return s;
    else
        return std::string();
}

使用标准库函数对象及适配器定义一条表达式,令其找到第一个等于pooh的字符串

适配器:函数适配器bind()函数,见C++primer P354

vector<string>svec;
    string s;
    while (cin >> s)
    {
        svec.push_back(s);
    }
    auto pos = find_if(svec.begin(), svec.end(), bind(equal_to<string>(), _1, "pooh")); //find_if 接受单一参数的调用对象,而要将“pooh”传进去,使用函数适配器进行
    if (pos != svec.end())
        cout <<"#"<< *pos << endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值