类型层次结构中的类型例程重载

例程重载指的是这样的能力:将一个名称指定给多个例程并指定不同类型的自变量来供例程对它们进行操作。在类型层次结构中,子类型自动继承对其超类型定义的例程。然而,可以对子类型定义新的例程以覆盖所继承的同名例程。例如:假定对类型 person_t 创建了 getinfo() 例程,该例程返回类型为 person_t 的实例的姓氏和生日。您可以对类型 employee_t 注册另一个 getinfo() 例程,它返回 employee_t 的实例的姓氏和薪水。这样,您就可以重载例程,以便类型层次结构中的每个类型都有定制的例程,如下图所示。

图: 类型层次结构中例程重载的示例


每个 person_t、employee_t 和 sales_rep_t 数据类型都已定义 getinfo() 例程。

当您重载例程以将例程定义为对类型层次结构中的不同类型具有相同的名称但具有不同的自变量时,指定的自变量确定执行哪个例程。例如:如果使用类型为 employee_t 的自变量来调用 getinfo(),那么对类型 employee_t 定义的 getinfo() 例程将覆盖所继承的同名例程。同样,如果对类型 sales_rep_t 定义另一个 getinfo(),那么使用类型为 sales_rep_t 的自变量来调用 getinfo() 将覆盖 sales_rep_temployee_t 继承的例程。

有关如何创建和注册用户定义的例程 (UDR) 的信息,请参阅 GBase 8s 用户定义的例程与数据类型开发者指南