我不理解“编程原理和实践”第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()如何成为一个对象的成员函数,因为没有实例可以处理?请有人指教这个吗?
答案 0 :(得分:3)
在color()函数之前没有实例
没关系。 color()
可能是Lines
(具有实例this
)的成员函数,或者是全局自由函数(根本没有实例)。
然后如你所说,第二个函数visibility()
应该是第一个函数color()
返回的对象的成员函数。
答案 1 :(得分:1)
这是这种方法链接的一个例子吗?
通常,方法链描述对成员函数的链式调用,这些函数返回调用它们的实例(通过引用)。但在这种情况下,第一个函数似乎不是它返回的实例的成员函数。否则,该模式与方法链相同。
但是,在这个例子中,Bjarne Stroustroup在color()函数之前没有实例。
因此,您可以推断color
是非成员函数,或Lines
成员,在这种情况下,实例是隐式this
。您还可以推断它将实例返回给具有成员函数visibility
的对象。当然,如果您声明color
,则无需进行此类扣除。
这个color()如何成为一个对象的成员函数,因为没有可以处理的实例?
它不会成为会员功能。如果它是Lines
的成员函数,那么它适用于this
,否则它是一个自由函数,不需要实例。在任何一种情况下,它都可以返回某个类型的无关实例,该实例具有名为visibility
的成员函数。