子类型的概念是否需要动态方法绑定?

时间:2019-07-06 21:23:43

标签: oop programming-languages virtual-functions subtype

https://en.wikipedia.org/wiki/Subtyping

  

在编程语言理论中,子类型化(也称为子类型多态性或包含性多态性)是类型多态性的一种形式,其中子类型是通过某种概念与另一个数据类型(超类型)相关的数据类型可替换性的含义,这意味着编写为对超类型的元素进行操作的程序元素(通常是子例程或函数)也可以对子类型的元素进行操作。

在“子类型”的概念中,当将“可替换性”解释为“编写为对超类型的元素进行操作的程序元素(通常是子例程或函数)也可以对子类型的元素进行操作”时,它是否假定/要求动态方法绑定(例如,在C ++中指定为虚拟函数的方法)?

具体来说,给定类型为B且带有方法m()的函数

void f(B b){
    b.m();
}

S的子类型B,它重新定义了m()方法,根据“可替换性”的含义,SB的子类型维基百科文章中的意思是:

  1. 如果使用实例f()的实例s调用S,则b.m()中的f()将调用S.m()而不是调用{{ 1}},(这种情况下需要动态方法绑定。)
  2. ,或者在B.m()的定义中将B替换为S

    f()

    仍然工作,即void f(S s){ S.m(); } 可以与f()B一起使用,即“子类型”仅要求S也具有方法Sm()相同的签名? (这种情况不需要动态方法绑定。)

0 个答案:

没有答案