当超类在fortran中包含延迟的方法时,如何从子类中调用超类方法?

时间:2019-07-06 18:16:08

标签: fortran

我试图建立一个带有两个子子类的父类。父类将包含至少一种延迟方法和至少一种非延迟方法。

父类

      TYPE, ABSTRACT :: parent
      CONTAINS
         PROCEDURE (parent_deferred_method), DEFERRED :: deferred_method
         PROCEDURE :: non_deferred_method => parent_non_deferred_method
      END TYPE

      ABSTRACT INTERFACE
         FUNCTION parent_deferred_method(this)
            IMPORT
            CLASS (parent), INTENT(in) :: this
            INTEGER                    :: parent_deferred_method
         END FUNCTION
      END INTERFACE

      CONTAINS

      FUNCTION parent_non_deferred_method(this)
         CLASS (parent), INTENT(in) :: this
         INTEGER                    :: parent_non_deferred_method

         parent_non_deferred_method = 1
      END FUNCTION

因为我有一个延迟的方法,所以我需要将父类型设为抽象。现在,我要定义两个子类。一个孩子将不会覆盖父类的非延迟方法。

儿童1班

      TYPE, EXTENDS(parent) :: child1
      CONTAINS
         PROCEDURE :: deferred_method => child1_deferred_method
      END TYPE

      CONTAINS

      FUNCTION child1_deferred_method(this)
         CLASS (child1), INTENT(in) :: this
         INTEGER                    :: child1_deferred_method

         child1_deferred_method = 2
      END FUNCTION

但是另一个将覆盖。我遇到的问题是我想第二个子类调用父类的方法。但是,由于父类为ABSTRACT,这给了我一个错误。

儿童2班

      TYPE, EXTENDS(parent) :: child2
         CONTAINS
         PROCEDURE :: deferred_method => child2_deferred_method
         PROCEDURE :: non_deferred_method => child2_non_deferred_method
      END TYPE

      CONTAINS

      FUNCTION child2_deferred_method(this)
         CLASS (child2), INTENT(in) :: this
         INTEGER                    :: child2_deferred_method

         child2_deferred_method = 3
      END FUNCTION

      FUNCTION child2_non_deferred_method(this)
         CLASS (child2), INTENT(in) :: this
         INTEGER                    :: child2_non_deferred_method

         child2_non_deferred_method = 4 +                                      &
     &      this%parent%non_deferred_method()
      END FUNCTION

当超类包含延迟的方法时,如何调用该超类方法?

0 个答案:

没有答案