派生型

目的

派生型ステートメントは、派生型定義の最初のステートメントです。

構文

構文図を読む構文図をスキップする
>>-TYPE--+-------------------------+--type_name--+----------------------------+-><
         +-::----------------------+             '-(--type_param_name_list--)-'   
         '-,type_attribute_list ::-'                                              

type_attribute
PRIVATEPUBLIC BIND(C) extends_spec、または ABSTRACT です。
type_name
派生型の名前です。
extends_spec (Fortran 2003)
以下の通りです。
構文図を読む構文図をスキップする
>>-EXTENDS--(--parent_type_name--)-----------------------------><

type_param_name (Fortran 2003)
型パラメーターの名前です。詳しくは、派生型パラメーター (Fortran 2003)を参照してください。
構文図を読む構文図をスキップする
>>-+-type_param_name-+-----------------------------------------><
   '-,---------------'   

規則

同じ型の属性は、同じ派生型ステートメントに一度しか現れません。

派生型定義が、モジュールの宣言部分内にある場合、指定できる属性は、PRIVATE または PUBLIC のみです。 派生型定義は、PRIVATE または PUBLIC のいずれかで、両方を指定することはできません。

型を PRIVATE として定義する場合、次のものは、定義するモジュール内でのみアクセス可能となります。
  • この派生型の場合は、型名および任意の Fortran 2003 の始まり 型パラメーターの名前 Fortran 2003 の終わり
  • その型の構造体コンストラクター
  • その型の仮引数または関数結果を持つプロシージャー

type_name を、BYTE および DOUBLECOMPLEX 以外の組み込み型と同じ名前にしないでください。また、type_name を、他のアクセス可能な派生型の名前にしないでください。

BIND(C) によって、Fortran 派生型を、C 型と相互に使用できるよう明示的に定義します。コンポーネントは、相互使用可能な型にする必要があります。(追加情報は、型の相互運用性を参照。)BIND 属性を持つ派生型は、SEQUENCE 型にできません。 BIND 属性を持つ派生型のコンポーネントには、相互使用可能な型と型パラメーターを持たせる必要があります。POINTER または ALLOCATABLE 属性を持たせることはできません。 EXTENDS を指定する場合、型には、BIND(C) 属性を指定できません。

parent_type_name は、アクセス可能で拡張可能な型にする必要があります。拡張可能な型について詳しくは、拡張可能派生型 (Fortran 2003)を参照してください。

拡張可能な型には、ABSTRACT 属性のみを指定できます。

EXTENDS が指定された場合、SEQUENCE は、その型に対して出現できません。

EXTENDS が指定され、定義される型に、ISO_FORTRAN_ENV 組み込みモジュールからの LOCK TYPE 型の最終コンポーネントがある場合、その親タイプには、LOCK TYPE 型の最終コンポーネントが必要です。

型パラメーターの名前を指定する場合は、その型 (上位の型を含む) の中で固有にする必要があります。名前ごとに型パラメーター宣言が必要です。詳しくは、派生型パラメーター (Fortran 2003) を参照してください。

対応する END TYPE ステートメントで名前を指定する場合、type_name と同じ名前にする必要があります。

MODULE ABC
  TYPE, PRIVATE :: SYSTEM      ! Derived type SYSTEM can only be accessed
    SEQUENCE                   !   within module ABC
    REAL :: PRIMARY
    REAL :: SECONDARY
    CHARACTER(20), DIMENSION(5) :: STAFF
  END TYPE
END MODULE
 TYPE MULTIDIM (K,NDIMS)
    INTEGER, KIND :: K
    INTEGER, LEN  :: NDIMS
    REAL(K) :: POS(NDIMS)
  END TYPE MULTIDIM
  TYPE, EXTENDS(MULTIDIM) :: NAMED_MULTI (L)
    INTEGER, LEN :: L
    CHARACTER(L) :: NAME
  END TYPE NAMED_MULTI

関連情報