类构造函数在哪里?

时间:2017-01-24 12:03:24

标签: class oop fortran

考虑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)实际上是如何工作的?如果该类有更多字段,如何创建默认初始化它们的构造函数呢?

1 个答案:

答案 0 :(得分:3)

Fortran中每个用户定义的派生类型都有一个默认的结构构造函数。它的参数只是派生类型的所有组件,因为它们被声明。

默认构造函数中某些类型的组件可能是可选的,例如默认初始化组件或可分配组件。

结构构造函数是一个函数,它返回派生类型的对象,并以派生类型命名。它由用户定义的结构构造函数may be overloaded

"如果该类有更多字段,如何创建默认初始化它们的构造函数,该怎么办?"

.Group(x => x._event.NodeId

都是合法的。组件在声明时按顺序是默认构造函数的参数,但其中一些是可选的。 (注意,gfortran 4.8不编译上面的代码,但是错了)