"延伸" Fortran派生类型中的函数

时间:2018-04-25 22:24:04

标签: inheritance fortran derived-types

我说"延伸"因为,原谅我,我不确定这里正确的OOP术语是什么。我不想完全覆盖一个函数。我希望继承派生类型中的函数执行同名函数在父类型中执行的所有工作,然后添加到该类型。我想要这样的东西:

module foo1
  type :: bar1
  contains
    procedure :: f1
  end type bar1
contains
  subroutine bar1()
  ! do stuff
  end subroutine bar1
end module foo1

module foo2
  use foo1
  type, extends(bar1) :: bar2
  contains
    procedure :: f1
  end type bar2
contains
  subroutine f1()
    ! call parent f1
    ! do other stuff
  end subroutine f1
end module foo2

有没有办法在Fortran中执行此操作?

1 个答案:

答案 0 :(得分:2)

你必须做正常的覆盖,在新程序中你必须手动调用父类型程序(以ptb A Fortran analog to python's super()?的评论方式链接)。

subroutine f1(self)
  call self%bar1%f1 
  !the rest
end subroutine