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 301<br />

definita. Ad esempio, si supponga che la variabileax debba assumerne il valore del più grande fra<br />

le componenti x ed y di px. Questa assegnazione deve essere definita attraverso una subroutine<br />

con due argomenti non opzionali, il primo avente l’attributo INTENT(OUT) o INTENT(INOUT), il<br />

secondo l’attributo INTENT(IN), ed inoltre deve essere creato un interface assignment block.<br />

L’interface block necessario per l’estensione dell’operatore di assegnazione ha la seguente<br />

forma:<br />

INTERFACE ASSIGNMENT (=)<br />

corpo_dell’interfaccia<br />

END INTERFACE<br />

La definizione del nuovo operatore di assegnazione può essere efficacemente inserita in un<br />

modulo, come di seguito illustrato:<br />

MODULE overloading_assegnazione<br />

IMPLICIT NONE<br />

TYPE point<br />

REAL :: x, y<br />

END TYPE point<br />

...<br />

INTERFACE ASSIGNMENT(=)<br />

MODULE PROCEDURE assignnew<br />

END INTERFACE<br />

CONTAINS<br />

SUBROUTINE assignnew(ax,px)<br />

REAL, INTENT(OUT) :: ax<br />

TYPE(point), INTENT(IN) :: px<br />

ax = MAX(px%x,px%y)<br />

END SUBROUTINE assignnew<br />

...<br />

END MODULE overloading_assegnazione<br />

Un programma che invochi questo modulo attraverso l’associazione di USE può eseguire, così<br />

come richiesto, l’assegnazione (ora definita) tra una variabile di tipo punto e una variabile di<br />

tipo reale:<br />

USE overloading_assegnazione<br />

REAL :: ax<br />

TYPE (point) :: px<br />

...<br />

ax = px<br />

Ritornando per un attimo al modulo operatori visto a proposito dell’overloading degli<br />

operatori ed al tipo matrix in esso definito, un altro esempio di overloading dell’assegnazione<br />

potrebbe avere lo scopo di consentire di assegnare un array di tipo RAEL ad un array di tipo

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

Saved successfully!

Ooh no, something went wrong!