小编Bla*_*ohn的帖子

如何在抽象派生类型中设计 PRIVATE OVERRIDABLE 过程?

通常,抽象类型是后代派生类型的模型。包含在该类型中的过程如果被推迟,则应该是 PUBLIC,因为 PRIVATE 不能被模块本身引用或覆盖。但是,如果我希望每个后代都具有相同的功能 PRIVATE 过程来做某事(例如,测试其实例的初始化状态),我该如何设计 ABSTRACT 派生类型?我是否必须在每个后代中手动定义它们,还是可以在 ABSTRACT 中放置一个模型并在后代中实现它?下面是一个例子:

module test1
    implicit none

    private
    public :: my_numeric_type

    type, abstract :: my_numeric_type
    contains
        private
        procedure(op2), deferred :: add
        procedure(op2), deferred :: subtract
        generic, public :: operator(+) => add
        generic, public :: operator(-) => subtract
    end type my_numeric_type

    abstract interface
        function op2(a, b) result(r)
            import :: my_numeric_type
            class(my_numeric_type), intent(in) :: a, b
            class(my_numeric_type), allocatable :: r
        end function op2
    end interface
end module test1

module test2
    use test1, only: my_numeric_type
    implicit …
Run Code Online (Sandbox Code Playgroud)

oop fortran private abstract

5
推荐指数
1
解决办法
215
查看次数

标签 统计

abstract ×1

fortran ×1

oop ×1

private ×1