【问题标题】:Fortran 2003, Passing Derived Type to an Argument of Parent TypeFortran 2003,将派生类型传递给父类型的参数
【发布时间】:2014-04-11 07:05:45
【问题描述】:

搜索后,我找到了一个关于我刚刚遇到的相同错误的问题,但出于不同的原因here(他们不熟悉pass...不同的问题)。

我的问题很简单。在 Fortran 中,期望 class(parent) 类型的参数的函数可以接受 class(derived_from_parent) 吗?

如果需要示例或说明,请询问。非常感谢。

【问题讨论】:

    标签: oop inheritance polymorphism fortran derived-class


    【解决方案1】:

    是的,这没有任何问题。如果需要使用扩展(派生)类型的任何属性,则必须使用select type,如果不需要,则没有任何复杂性。

    如果您需要虚拟参数为allocatable 或pointer,则有一些限制:

    12.5.2.5

    2 实际参数应该是多态的当且仅当关联的 dummy 参数是多态的,并且无论是实际的还是虚拟的 参数应该是无限多态的,或者声明的类型 实际参数应与假人声明的类型相同 论据。

    (原因在 ISO/IEC 1539-1:2010 的注 12.27 中解释)

    【讨论】:

    • 值得注意的是,具有可分配或指针属性的虚拟参数存在异常。
    • @VladimirF @IanH 因此,传递的参数首先声明为class(derived_from_parent), allocatable 或class(derived_from_parent), pointer 但虚拟参数必须是class(parent) 的形式,省略, allocatable 或, pointer?我是否正确解释了您的 cmets?使用该语法,过程将正确接受派生类型?
    • 如果你这样做一切正常,IanH 指的是更高级的情况,你需要虚拟对象是可分配的或出于某种原因的指针。在这种情况下,声明的类型必须匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多