用C ++编写方法链接?

时间:2016-02-13 18:22:54

标签: c++ methods chaining

我不理解“编程原理和实践”第2版中的以下代码片段。作者:Bjarne Stroustroup第13.3条。

void Lines::draw_lines() const
{
    if (color().visibility())
    for (int i=1; i<number_of_points(); i+=2)
        fl_line(point(i–1).x,point(i–1).y,point(i).x,point(i).y);
}

我不明白color()。visibility()部分。这究竟是什么?我听说过方法链接虽然我不完全理解这一点。这是这种方法链接的一个例子吗?我在维基百科中看到,在链式方法中,第一个函数应该返回一个对象,第二个函数成为第一个函数返回的对象的成员函数。但是,在这个例子中,Bjarne Stroustroup在color()函数之前没有实例。这个color()如何成为一个对象的成员函数,因为没有实例可以处理?请有人指教这个吗?

2 个答案:

答案 0 :(得分:3)

  

在color()函数之前没有实例

没关系。 color()可能是Lines(具有实例this)的成员函数,或者是全局自由函数(根本没有实例)。

然后如你所说,第二个函数visibility()应该是第一个函数color()返回的对象的成员函数。

答案 1 :(得分:1)

  

这是这种方法链接的一个例子吗?

通常,方法链描述对成员函数的链式调用,这些函数返回调用它们的实例(通过引用)。但在这种情况下,第一个函数似乎不是它返回的实例的成员函数。否则,该模式与方法链相同。

  

但是,在这个例子中,Bjarne Stroustroup在color()函数之前没有实例。

因此,您可以推断color是非成员函数,或Lines成员,在这种情况下,实例是隐式this。您还可以推断它将实例返回给具有成员函数visibility的对象。当然,如果您声明color,则无需进行此类扣除。

  

这个color()如何成为一个对象的成员函数,因为没有可以处理的实例?

它不会成为会员功能。如果它是Lines的成员函数,那么它适用于this,否则它是一个自由函数,不需要实例。在任何一种情况下,它都可以返回某个类型的无关实例,该实例具有名为visibility的成员函数。