考虑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)
实际上是如何工作的?如果该类有更多字段,如何创建默认初始化它们的构造函数呢?
答案 0 :(得分:3)
Fortran中每个用户定义的派生类型都有一个默认的结构构造函数。它的参数只是派生类型的所有组件,因为它们被声明。
默认构造函数中某些类型的组件可能是可选的,例如默认初始化组件或可分配组件。
结构构造函数是一个函数,它返回派生类型的对象,并以派生类型命名。它由用户定义的结构构造函数may be overloaded。
"如果该类有更多字段,如何创建默认初始化它们的构造函数,该怎么办?"
.Group(x => x._event.NodeId
都是合法的。组件在声明时按顺序是默认构造函数的参数,但其中一些是可选的。 (注意,gfortran 4.8不编译上面的代码,但是错了)