在不同模块中扩展抽象类型

时间:2013-10-09 12:30:48

标签: oop fortran abstract-type

在下面的一段代码中,一个带有私有变量(name)的抽象类型和一个应该由所有派生类型定义的对该变量的访问函数在模块中定义:

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?

1 个答案:

答案 0 :(得分:2)

没有。组件名称的可访问性使用与其他模块实体相同的“按模块”模型。如果其他派生类型位于不同的模块中,则它们无法访问Name组件。

请记住,派生类型实际上并不包含过程 - 它们包含过程的绑定。因此,派生类型不能真正“做”任何事情。此外,单个过程可以绑定到多种类型。