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 才能更改变量名称?

4

1 回答 1

2

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

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

于 2013-10-09T21:02:38.067 回答