«Расширение» функции в производном типе Фортрана - PullRequest
0 голосов
/ 26 апреля 2018

Я говорю «расширение», потому что, простите, я не уверен, какова здесь правильная терминология ООП.Я не хочу переопределить функцию.Я хочу, чтобы функция в унаследованном производном типе выполняла всю работу, которую выполняет функция с тем же именем в родительском типе, а затем добавляла к ней.Я хочу что-то вроде:

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

Есть ли способ сделать это в Фортране?

1 Ответ

0 голосов
/ 26 апреля 2018

Вы должны сделать обычное переопределение, и внутри новой процедуры вы должны вызвать процедуру родительского типа вручную (способом, связанным в комментарии с помощью ptb Фортрановский аналог Python super ()? ).

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