抽象类中的过程
请问大佬,抽象类里面为什么会有deferred的过程,有了这个属性的过程在子类里还不能随意重载。那为什么不干脆不要了,子类里面想怎么重载怎么重载
定义了一个deferred的过程之后,父类可以调用这个过程。这样形成统一的接口。
其他使用 class(父类) 为参数的过程,也可以调用这个过程,而不需要判断对象属于哪个子类。(因为每个子类都有一个相同接口的函数)
给你一个例子
Module AbstImplicit None
Type , abstract , public :: T_People
character(len=30) :: name
contains
Procedure(itf_intro), deferred :: introduction
Procedure :: whoami
End Type T_People
interface
Subroutine itf_intro(this)
import
class(T_People):: this
End Subroutine itf_intro
end interface
contains
Subroutine whoami( this )
class(T_People) :: this
write(*,*) "Who am I ?"
call this%introduction()
End Subroutine whoami
End Module Abst
Module People
use Abst
Implicit None
Type , extends(T_People), public :: T_Chinese
contains
Procedure :: introduction => intro_chinese
End Type T_Chinese
Type , extends(T_People), public :: T_English
contains
Procedure :: introduction => intro_english
End Type T_English
contains
Subroutine intro_chinese(this)
class(T_Chinese):: this
write(*,*) "我的名字叫:" , this%name
End Subroutine intro_chinese
Subroutine intro_english(this)
class(T_English):: this
write(*,*) "My name is:" , this%name
End Subroutine intro_english
End Module People
Program Main
use People
Implicit None
type(T_Chinese) :: xiaoming = T_Chinese("小明")
type(T_English) :: John = T_English("John")
call xiaoming%introduction()
call some(xiaoming)
call some(John)
contains
Subroutine some(someone)
class(T_People) :: someone
call someone%whoami()
End Subroutine some
End Program Main fcode 发表于 2018-11-22 17:20
定义了一个deferred的过程之后,父类可以调用这个过程。这样形成统一的接口。
其他使用 class(父类) 为参数 ...
可不可以理解为就是为了使得父类和一众子类的过程接口全统一,才使用的这个deferred关键字。
如果自己在类书写的时候,使用的是重载的方式,但是接口是统一的话,就和有这个deferred属性的过程一样了?
多试试,朋友。
deferred 是一个语法规范,并没有规定“什么情况下才能用”,更没有“只有.... 才使用”这种说法。
每个人都有自己的需求,我并没有那么广袤的了解过所有的需求,也很少考虑“在几种情况下,才会使用”这类问题。 顶层框架 预留通用接口 fcode 发表于 2018-11-22 17:20
定义了一个deferred的过程之后,父类可以调用这个过程。这样形成统一的接口。
其他使用 class(父类) 为参数 ...
我曾经也想定义抽象类,结果怎么都不能成功
对比了版主您的例子,发现您在抽象方法的接口这里加了个import语句
想问下是不是因为这个语句,这个语句是干啥用的…… 为了让接口 itf_intro 认识结构体 T_People vvt 发表于 2018-11-26 08:28
为了让接口 itf_intro 认识结构体 T_People
原来如此,非常感谢
没在教科书上找到这个语句,一直不识……
页:
[1]