在下面的一段代码中,一个带有私有变量(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?
答案 0 :(得分:2)
没有。组件名称的可访问性使用与其他模块实体相同的“按模块”模型。如果其他派生类型位于不同的模块中,则它们无法访问Name
组件。
请记住,派生类型实际上并不包含过程 - 它们包含过程的绑定。因此,派生类型不能真正“做”任何事情。此外,单个过程可以绑定到多种类型。