首页 > 技术文章 > c++ 使用this指针进行串联的函数调用

txltxl22 2019-03-16 15:56 原文

如代码所示,在每个成员函数函数体最后返回*this.即可实现串联调用。

class Time
{
public:
    Time(int = 0, int = 0, int = 0);
    Time &setHour(int);
    Time &setMinute(int);
    Time &setSecond(int);
private:
    int hour;
    int minute;
    int second;
};

Time &Time::setHour(int h)
{
    hour = (h >= 0 && h <= 24) ? h : 0;
    return *this;
}
Time &Time::setMinute(int m)
{
    minute = (m >= 0 && m <= 60) ? m : 0;
    return *this;
}
Time &Time::setSecond(int s)
{
    second = (s >= 0 && s <= 60) ? s : 0;
    return *this;
}

int main()
{
    Time t;
    t.setHour(18).setMinute(30).setSecond(15);
}

 

因为圆点运算符的结合律使从左向右的,所以代码的调用顺序实际上是首先求t.setHour(18),返回对象t的引用,然后t.setMinute(30).setSecond(15),最后是t.setSecond(15)。

一个很典型的应用是cout串联多个<<进行输出。

推荐阅读