Рассмотрим this code, который представляет собой учебник для объектно-ориентированного программирования на языке Fortran:Где конструктор класса?
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
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
Я не вижу никакого конструктора для класса, так как же c = Circle(1.5)
на самом деле работает? Что делать, если для класса есть больше полей, как я могу создать конструктор, который инициализирует их по умолчанию?
Спасибо, я хочу создать объект-таймер, можно ли вызвать system_clock и назначить значения в поле, которое содержит кол-во макс и скорость счета в конструктор, который выполняется автоматически? – Saeid
Это похоже на задачу для пользовательского конструктора http://stackoverflow.com/questions/4262253/how-to-override-a-structure-constructor-in-fortran или, возможно, нет. Я не уверен, что вы имеете в виду. –