“这个”级联是如何工作的?

2024-03-07

我有以下类接口:

  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; 
   }

在我的主 .cpp 文件中,我有以下代码:

int main()
{
    Time t;     
    t.setHour( 18 ).setMinute( 30 ).setSecond( 22 );
    return 0;
}

如何将这些函数调用链接在一起?我不明白为什么这有效。


其正确工作的原因是当您调用

t.setHour( 18 )

返回值是一个Time&,对一个的引用Time目的。更重要的是,它被定义为

Time &Time::setHour( int h ) 
{
   hour = ( h >= 0 && h < 24 ) ? h : 0; 
   return *this;  // <--- right here
}

在成员函数内部,this是指向进行调用的对象的指针,并且*this是对进行调用的对象的引用(接收者对象)。这意味着当你打电话时setHour,该函数设置时间上的小时,然后返回对Time您对其进行调用的对象。因此t.setHour( 18 )两者都设置小时,然后返回对接收者对象的引用。这样,你就可以写

t.setHour( 18 ).setMinute( 30 ).setSecond( 22 );

因为它被解释为

((t.setHour( 18 )).setMinute( 30 )).setSecond( 22 );

在每种情况下,该函数都会返回对的引用t.

更一般地说,任何时候函数返回引用并且该引用是*this,对函数返回值执行的任何操作与对对象本身执行的操作没有区别。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“这个”级联是如何工作的? 的相关文章

随机推荐