abstract中的一个问题
本帖最后由 lookbook 于 2018-12-1 15:54 编辑父类如下:
... | ...
|
type,abstract :: t_a | type,abstract :: t_a
integer :: a | integer:: a
contains | contains
procedure(fun1),pass(this),deferred :: fun1 | procedure(fun1_mode),pass(this),deferred :: fun1
end type | end type
|
abstract interface | abstract interface
module subroutine fun1(this) | module subroutine fun1_mode(this)
class(t_a)::this | class(t_a)::this
... | ...
end subroutine | end subroutine
end interface | end interface
|
private fun1 |
end | end
子类:
use ...
type,extends(t_a)::t_b
real :: b
contains
procedure,pass(this) :: fun1
end type
contains
subroutine fun1(this)
class(t_b) :: this
...
end subroutine
...
------------------------------------------------------
这两种形式我都试过可以,第一种deferred的过程可以和接口名称一样,但必须加private
第二种就是书上的
其实我一直有个问题,过程名可以和接口名一致吗?
第一种方法会造成诸如扩展维护上的问题吗?
额,这蛋疼的编辑格式。。。大佬们将就看看吧 按照上次从版主石头那里学来的知识
似乎应该在每一个抽象接口里边定义变量之前加入import语句啊
如果没有这个语句应该会报在抽象接口中用的派生类型没有定义
你这个写法确信能用? 本帖最后由 lookbook 于 2018-11-30 20:44 编辑
liudy02 发表于 2018-11-30 16:31
按照上次从版主石头那里学来的知识
似乎应该在每一个抽象接口里边定义变量之前加入import语句啊
如果没有这 ...
经你提醒,我看了下,确实有不妥的地方。
我和版主的方法不太一样,是:
interface
module subroutine(this,...)
implicit none
class(balabala...)::this
....
这样也是可以的,帖子也更新了,感谢 lookbook 发表于 2018-11-30 20:42
经你提醒,我看了下,确实有不妥的地方。
我和版主的方法不太一样,是:
interface
其实还有个问题,既然你是定义abstract类的话
应该还是想帮定有抽象过程的吧,否则似乎也没太大必要定义成抽象类
仅仅只是为了不让申明父类对象么,感觉这不是通常用法……
另外,看你写了抽象过程的接口,也不是啊
那么,是不是在定义类的时候,fun1的绑定申明的时候应该有deferred关键字吧 liudy02 发表于 2018-12-1 09:41
其实还有个问题,既然你是定义abstract类的话
应该还是想帮定有抽象过程的吧,否则似乎也没太大必要定义 ...
小姐姐可以啊,发现了这么多问题,
确实少了deferred,还有没有其他的毛病?
十分感谢 lookbook 发表于 2018-12-1 15:52
小姐姐可以啊,发现了这么多问题,
确实少了deferred,还有没有其他的毛病?
十分感谢 ...
小姐姐个毛线啊,我是男的,那个头像我从来没选过,鬼知道为什么是个那个……
页:
[1]