fortran - fortran 中的构造函数
问题描述
我有 2 个子类 - ResultsPublisherInitial 和 ResultsPublisherFinal,它们都扩展了 ResultsPublisher 抽象类。
抽象类是这样的:
type, public, abstract:: ResultsPublisher
type(LAConstraintManagementResults), public, pointer:: lacmResults => null()
type(LACM_InputModel), public, pointer:: inputModel => null()
type(LACM_ForecastResults), public, pointer:: forecast => null()
end type ResultsPublisher
然后我有 2 个子类 - ResultsPublisherInitial 和 ResultsPublisherFinal,每个子类都有构造函数:
type, public, extends(ResultsPublisher):: ResultsPublisherInitial
type(LACM_Model), public, pointer:: lacmModel => null()
end type ResultsPublisherInitial
interface ResultsPublisherInitial
procedure:: ConstructorInitial
end interface
contains
type(ResultsPublisherInitial) function ConstructorInitial(lacmResults, inputModel, forecast, lacmModel)
type(LAConstraintManagementResults), pointer:: lacmResults
type(LACM_InputModel), pointer, intent(in):: inputModel
type(LACM_ForecastResults), pointer, intent(in):: forecast
type(LACM_Model), pointer, intent(in):: lacmModel
ConstructorInitial%lacmResults => lacmResults
ConstructorInitial%inputModel => inputModel
ConstructorInitial%forecast => forecast
ConstructorInitial%lacmModel => lacmModel
end function
-----------------
!
type, public, extends(ResultsPublisher):: ResultsPublisherFinal
type(LR_Model), public, pointer:: lrModel => null()
end type ResultsPublisherFinal
interface ResultsPublisherFinal
procedure:: ConstructorFinal
end interface
contains
type(ResultsPublisherFinal) function ConstructorFinal(lacmResults, inputModel, forecast, lacmModel)
type(LAConstraintManagementResults), pointer:: lacmResults
type(LACM_InputModel), pointer, intent(in):: inputModel
type(LACM_ForecastResults), pointer, intent(in):: forecast
type(LACM_Model), pointer, intent(in):: lacmModel
ConstructorFinal%lacmResults => lacmResults
ConstructorFinal%inputModel => inputModel
ConstructorFinal%forecast => forecast
ConstructorFinal%lacmModel => lacmModel
end function
如您所见,我为每种具体类型都有 2 个构造函数,通过接口过程引入。这些过程的名称是ConstructorInitial和ConstructorFinal。为什么我没有将它们命名为Constructor,因为它们在不同的模块范围内,它们不应该互相重载?我试图给它们起相同的名称,但是在客户端代码中调用构造函数时出现错误。-> 这意味着对于每个类,我必须在“构造函数”之后添加额外的后缀。
我希望可以选择,无论有多少不同的类,在每个类中只使用构造器词来构造对象。但是在用于创建对象的客户端代码中,我将使用该类型的确切名称。这可能吗?
解决方案
推荐阅读
- java - 使用 Java 将 Redis 数据库连接到 Azure 云
- php - @yield 不显示 Laravel 上的内容
- php - 为什么网站有一种间接的方式来显示用户个人资料图片?
- javascript - 根据具有匹配值的参数数组对对象数组进行排序
- .htaccess - 在维护期间重定向除我之外的所有用户
- javascript - AJAX 不返回预期的响应
- flutter - 在颤动中更改滑块拇指位置
- python - 如何在 Selenium WebDriver 中设置浏览器的宽度和高度?
- reactjs - 如何在 React useState 中修改 JSX
- javascript - 迭代关联对象js