我说"延伸"因为,原谅我,我不确定这里正确的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中执行此操作?
答案 0 :(得分:2)
你必须做正常的覆盖,在新程序中你必须手动调用父类型程序(以ptb A Fortran analog to python's super()?的评论方式链接)。
subroutine f1(self)
call self%bar1%f1
!the rest
end subroutine