25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

5.17 Overloading 287<br />

INTERFACE OPERATOR (operatore_intrinseco)<br />

corpo dell’interfaccia<br />

END INTERFACE<br />

dove operatore_intrinseco è l’operatore cui applicare l’overloading mentre con l’espressione<br />

corpo dell’interfaccia si è indicato una function con uno o due argomenti aventi attributo<br />

INTENT(IN).<br />

Ad esempio, l’operatore di addizione, ”+”, potrebbe essere esteso alle variabili di tipo carattere<br />

al fine di concatenare due stringhe ignorando ogni eventuale spazio bianco di coda, e<br />

questa estensione potrebbe essere efficacemente inserita in un modulo:<br />

MODULE overloading_addizione<br />

IMPLICIT NONE<br />

...<br />

INTERFACE OPERATOR (+)<br />

MODULE PROCEDURE concat<br />

END INTERFACE<br />

...<br />

CONTAINS<br />

FUNCTION concat(cha,chb)<br />

IMPLICIT NONE<br />

CHARACTER (LEN=*), INTENT(IN) :: cha, chb<br />

CHARACTER (LEN=(LEN_TRIM(cha) + LEN_TRIM(chb))) :: concat<br />

concat = TRIM(cha)//TRIM(chb)<br />

END FUNCTION concat<br />

...<br />

END MODULE overloading_addizione<br />

In una qualsiasi unità di programma che usi il modulo overloading_addizione, l’espressione<br />

cha+chb è perfettamente interpretata come una operazione di concatenamento di stringhe.<br />

Un altro esempio, sempre relativo alle variabili di tipo stringa, potrebbe essere quello di<br />

definire una operazione di divisione (”/”) fra una stringa e una variabile carattere con il significato<br />

di fornire il numero di volte che detto carattere compare all’interno della stringa. Ciò può<br />

essere ottenuto al modo seguente:<br />

MODULE overloading_divisione<br />

INTERFACE OPERATOR (/)<br />

MODULE PROCEDURE num<br />

END INTERFACE<br />

CONTAINS<br />

INTEGER FUNCTION num(s,c)<br />

CHARACTER(LEN=*), INTENT(IN) :: s<br />

CHARACTER, INTENT(IN) :: c<br />

num = 0<br />

DO i=1,LEN(s)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!