2

次のコードでは、プライベート変数 (名前) を持つ抽象型と、すべての派生型によって定義されるこの変数へのアクセス関数がモジュールで定義されています。

module baseTypeModule

type, abstract :: baseType
private
    character(len=maxLengthCompLabel) :: Name = ""           ! Component name
contains
    procedure, non_overridable :: getName                    ! Access functio to Name (read only)
end type baseType

contains

character(len=100) function getName(this)
    implicit none
    class(baseType), intent(in) :: this
    getName = this % Name
end function getName

end module baseTypeModule

各派生型には他にも多くの変数と関数があるため、各派生型を別のモジュールで定義したいと思います。

Fortran で、baseType の派生型のみが変数 Name を変更できるようにすることをコンパイラーに伝える方法はありますか?

4

1 に答える 1

2

いいえ。コンポーネント名のアクセシビリティは、他のモジュール エンティティと同じ「モジュール別」モデルを使用します。他の派生型が異なるモジュールにある場合、それらはNameコンポーネントにアクセスできません。

派生型には実際にはプロシージャが含まれていないことに注意してください。プロシージャのバインドが含まれています。したがって、派生型は実際には何も「実行」できません。また、1 つのプロシージャを複数の型にバインドすることもできます。

于 2013-10-09T21:02:38.067 に答える