我有以下类接口:
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(使用前将#替换为@)