这是我关于 Fortran 的第二个问题(我使用 C++,所以请原谅我的思维方式)。
我想在适当的时候在 Fortran 中使用 OOP,也就是说,派生类型。在 C++ 中,您可以使用用户定义的构造函数,例如https://msdn.microsoft.com/en-us/library/s16xw1a8.aspx
在 Fortran 中,情况有所不同。我尝试的第一件事是从这里开始:https : //www.ibm.com/developerworks/community/blogs/b10932b4-0edd-4e61-89f2-6e478ccba9aa/entry/object_oriented_fortran_user_defined_constructors2?lang=en
然后我找到了一些其他的方法来做到这一点。在这里,我列出了一些似乎有效的方法,但我只测试了第一种和第二种方法:
使用类型绑定过程(这甚至不是“传统”构造函数)
MODULE mymod
TYPE mytype
Private
INTEGER :: x
CONTAINS
PROCEDURE, PASS :: init
END TYPE
CONTAINS
SUBROUTINE init(this, i)
CLASS(mytype), INTENT(OUT) :: this
INTEGER, INTENT(IN) :: i
write(*,*) this%x
IF(i > 0) THEN
this%x = 1
ELSE
this%x = 2
END IF
write(*,*) this%x
END SUBROUTINE init
END
PROGRAM test
USE mymod
TYPE(mytype) :: y
CALL y%init(1)
END PROGRAM
Run Code Online (Sandbox Code Playgroud)使用静态构造函数或结构构造函数( …