MODULE CLASS_CIRCLE IMPLICIT NONE PRIVATE PUBLIC :: CIRCLE, CIRCLE_AREA, CIRCLE_PRINT REAL :: PI = 3.1415926535897931d0 ! Class-wide private constant TYPE CIRCLE REAL :: RADIUS END TYPE CIRCLE CONTAINS FUNCTION CIRCLE_AREA(THIS) RESULT(AREA) TYPE(CIRCLE), INTENT(IN) :: THIS REAL :: AREA AREA = PI * THIS%RADIUS**2.0 END FUNCTION CIRCLE_AREA SUBROUTINE CIRCLE_PRINT(THIS) TYPE(CIRCLE), INTENT(IN) :: THIS REAL :: AREA AREA = CIRCLE_AREA(THIS) ! Call the circle_area function PRINT *, 'Circle: r = ', this%radius, ' area = ', AREA END SUBROUTINE CIRCLE_PRINT END MODULE CLASS_CIRCLE PROGRAM CIRCLE_TEST USE CLASS_CIRCLE IMPLICIT NONE TYPE(CIRCLE) :: C ! Declare a variable of type Circle. C = CIRCLE(1.5) ! Use the implicit constructor, radius = 1.5 CALL CIRCLE_PRINT(C) ! Call a class subroutine END PROGRAM CIRCLE_TEST