Research Article

Emulating Multiple Inheritance in Fortran 2003/2008

Listing 3

Additional level of abstraction used to incorporate all classes to be inherited.
(1)  module facade_concrete
(2)   use object_distribution_concrete, only: object_distribution
(3)   use object_computation_concrete, only: object_computation
(4)   implicit none
(5)   private
(6)   public :: facade
(7)   type,  extends(object_distribution):: facade
(8)    type(object_computation):: my_flop
(9)    contains
(10)     procedure:: FlopCount
(11)   end type
(12)   interface facade
(13)  module procedure constructor
(14)   end interface
(15)   contains
(16)  type(facade) function constructor()
(17)   constructor%object_distribution=object_distribution()
(18)   constructor%my_flop=object_computation()
(19)   end function
(20)  subroutine FlopCount(this)
(21)   class(facade), intent(in):: this
(22)  call this%my_flop%FlopCount()
(23)  end subroutine
(24)  end module