x est un entier si a et b sont des entiers
x est un réel si a et b sont des réels ou a entier et b réel ...
x est un tableau du même profil que a si a et b sont deux tableaux de même profil.
L'opération + ( -,/ ou *) est déjà prédéfinie, et selon le
type des opérandes elle fournit un résultat différent.
Fortran offre la possibilité de :
Exemple.
Interface operator (+)
Interface operator (-)
Exemple. Interface operator (.SOMME.)
Cette technique est utilisée pour doter d'opérateurs simples des types dérivées, afin d'en simplifier la manipulation.
MODULE opplusmod
IMPLICIT NONE
TYPE point
INTEGER :: num
REAL :: x,y
END TYPE point
INTERFACE OPERATOR(+)
MODULE PROCEDURE point_plus_point, point_plus_entier
END INTERFACE
CONTAINS
FUNCTION point_plus_point( p1, p2) RESULT(ppp)
TYPE(point), INTENT(IN) :: p1,p2
TYPE(point) :: ppp
ppp = point(p1%num+p2%num, p1%x+p2%y, p1%y+p2%y)
END FUNCTION point_plus_point
FUNCTION point_plus_entier( p, n) RESULT(ppn)
TYPE(point), INTENT(in) :: p
INTEGER , INTENT(in) :: n
TYPE(point) :: ppn
ppn = point(p%num+n, p%x, p%y)
END FUNCTION point_plus_entier
END MODULE opplusmod
Ce module a permis de définir la somme de deux structures
comme on le souhaite par l'interface operator (+).
Voici un exemple d'utilisation de ce module :
Program operateur
USE opplusmod
IMPLICIT NONE
TYPE(point) :: a,b,c
a = point(3, 2., 3.)
b = point(2, 4., 5.2)
c = a+b
PRINT*,'a+b =',c
PRINT*,'c+14 =',c+14
Exercices
TYPE rationnel integer :: num, den END rationnelce type permet de définir une fraction rationnelle numérateur sur denominateur.
Ecrire une interface operator (+) permettant de supporter les instructions suivantes
f = f1+f2
f = f1+2
f = 2+f1