派生資料型別

定義一個新型別 mytype

type::mytype
  integer::int
  real    :: float
end type mytype

宣告 mytype 型別的變數 :

type(mytype) :: foo

可以使用%運算子 1 訪問派生型別的元件 :

foo%int = 4
foo%float = 3.142

Fortran 2003 功能(尚未由所有編譯器實現)允許定義引數化資料型別:

type, public::matrix(rows, cols, k)
  integer, len::rows, cols
  integer, kind::k = kind(0.0)
  real(kind = k), dimension(rows, cols) :: values
end type matrix

派生型別 matrix 有三個型別引數,它們在型別名稱後面的括號中列出(它們是 rowscolsk)。在每個型別引數的宣告中,必須指出它們是 kind(kind)還是 length(len)型別引數。

型別引數(如內部型別的引數)必須是常量表示式,而長度型別引數(如內部字元變數的長度)在執行期間可能會有所不同。

請注意,引數 k 具有預設值,因此當宣告 matrix 型別的變數時,可以提供或省略它,如下所示

type (matrix (55, 65, kind=double)) :: b, c ! default parameter provided
type (matrix (rows=40, cols=50)     :: m    ! default parameter omitted

派生型別的名稱可能不是 doubleprecision 或與任何內在型別相同。

  1. 許多人想知道為什麼 Fortran 使用%作為元件訪問運算子,而不是更常見的 .。這是因為 . 已經被運算子語法所取代,即 .not..and..my_own_operator.