这段代码是 Objective-C [1]中动态绑定的经典示例:
float total = tareWeight; // start with weight of empty container
int i, n = [self size]; // n = number of members
for (i = 0; i < n; ++i) { // loop over each member
id member = [self at:i]; // get next member
total += [member weight]; // accumulate weight of contents
}
return total; // return total weight to caller
因此,作为一名在这门语言方面有一定经验并在 C++ 中迈出第一步的程序员,我想知道:鉴于它还支持某种后期绑定,如何在 C++ 中实现它?
在此示例中,我们假设每个成员都可以属于任何类,但是weight
当然必须实现该方法。如今,也可以使用诸如协议之类的机制来强制实现兼容(然后声明member
为 id<Matter>
),但根本不需要它就可以工作。
在 C++ 中,用所谓的虚函数创建一个超类是唯一的选择吗?
编辑
澄清一下,上面的代码可以看作是一个容器类方法,它返回其组件的总重量。您事先不知道容器上会出现什么,它可以是任何对象。你只知道这些对象响应消息weight
。
[1]面向对象编程,一种进化方法,第 2 版,1991 - Brad J. Cox,Andrew J. Novobilski - 第 4 章,第 65 页