如代码所示,在每个成员函数函数体最后返回*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串联多个<<进行输出。