Operatoren und generische Funtionen

Überladen von Operatoren

MODULE RATIONAL_ARITHMETIC
  TYPE Ratio
    ...                           ! wie oben
  END TYPE Ratio

  INTERFACE OPERATOR(*)
    MODULE PROCEDURE ratmul       
  END INTERFACE
     ...

PROGRAM Ratiofarm
  USE  RATIONAL_ARITHMETIC
  TYPE(Ratio)   :: a,b,c
  c = a * b

selbstdefinierte Operatoren

MODULE PERSONLIB
  TYPE Person
    CHARACTER(LEN=20)  :: name
    INTEGER            :: age
  END TYPE Person
       
  INTERFACE OPERATOR (.YOUNGER.)
    MODULE PROCEDURE person_younger
  END INTERFACE 

  PRIVATE person_younger
  
 CONTAINS

  LOGICAL FUNCTION person_younger(p1, p2)
    IMPLICIT NONE
    TYPE(Person), INTENT(IN) :: p1, p2         
    person_younger = (p1%age < p2%age)
  END FUNCTION person_younger

END MODULE PERSONLIB

PROGRAM youthtest
  USE PERSONLIB
  TYPE(Person)  :: you, me

  IF (you .YOUNGER. me)
    ...

generische Funktionen

! im Modul SPECIAL_FUNCTIONS
INTERFACE GAMMA                    ! neue generische Funktion
  MODULE PROCEDURE SGAMMA, DGAMMA, CGAMMA, ZGAMMA
END  INTERFACE
   
! im Module RATIONAL_ARITHMETIC
INTERFACE SIN                      ! erweitert generische Funktion SIN
  MODULE PROCEDURE ratsin
END INTERFACE