什么是Fortran中的“类型绑定子程序”和相关的?

时间:2017-10-02 22:24:32

标签: oop fortran

我对Fortran语言很陌生,我只是把它拿了一个月。 (我经常使用C / C ++) 我有几个问题:

  1. 什么是“类型绑定子程序”?我的理解是子程序只能由具有某种类型的某个实例调用。 (http://fortranwiki.org/fortran/show/Object-oriented+programming)。我读过的这本书实际上并没有提供一个很好的定义,这非常令人惊讶。
  2. 如果派生类型也可以有子程序,那么将它们放在派生类型和外部(模块中的正常类型)之间有什么区别?
  3. 按照上面的链接,“注意我们已经将伪参数从类型(Circle)更改为类(Circle)。然后我们可以以面向对象的方式调用类函数作为a = c%区域并调用c %print,其中类型自动传递给函数circle_area和circle_print的第一个参数。“对我来说,这就像C ++中的“this pointer”(https://www.tutorialspoint.com/cplusplus/cpp_this_pointer.htm)。因此,如果我们将子例程放在派生类型中,我认为在设计子例程时不再需要该类型了吗?
  4. 谢谢,我希望我已经解释清楚了。

1 个答案:

答案 0 :(得分:1)

类型绑定过程提供了一种引用过程的不同方式 - 过程通过绑定通过派生类型的对象引用。除了语法上的差异之外,通过派生类型的对象的引用允许基于对象的动态类型在运行时确定引用的特定过程。这在C ++中类似于通过指针或对象引用对虚拟成员函数的引用。带有绑定的派生类型的扩展可能会覆盖绑定引用的过程。

与C ++不同,Fortran中的过程可能绑定到一个或多个派生类型 - 您不会将过程放在派生类型中。碰巧是类型绑定的过程也可以在没有类型绑定语法的情况下直接引用,就像在Fortran 95中一样。

当过程绑定到某个类型时,绑定可以指定传递的参数。如果存在传递的参数并且使用类型绑定语法引用过程,则传递的参数与引用过程的对象相关联。这大致相当于C ++中隐式 this 指针,但在Fortran中,参数被明确传递并命名。

作为类型绑定的过程中的传递参数的参数必须是多态的 - 使用CLASS而不是TYPE声明 - 以允许传递参数的动态类型是声明的参数类型的扩展。