Fortran 2003的新特性 –终结例程 Final subroutines
来源:互联网 发布:xp系统连网络打印机 编辑:程序博客网 时间:2024/05/16 06:19
Intel Fortran Composer XE 2011中增加了对新一代Fortran标准中很多新特性的支持,其中包括了Fortran 2003中引入的面向对象的Fortran特性。在新标准中,我们可以通过在派生类型的定义中使用类型绑定过程(Type-bound procedures)把传统的数据结构定义与相关的操作封装起来,就象在C++中定义对象和成员函数一样。考虑下面的例子:
TYPE MY_TYPE
... ! Component declarations
CONTAINS
PROCEDURE :: PROC1 => MY_PROC
PROCEDURE :: PROC2
END TYPE MY_TYPE
这里定义了一个派生类型MY_TYPE和与其相关的两个操作例程PROC1和PROC2. 其中PROC1又和真正实现算法的过程MY_PROC进行了绑定。类型绑定过程的调用方式也很简单,类似于传统的类型数据成员引用:
CALL B%PROC1
和C++中的析构函数类似,Fortran中的类型绑定过程中也包含一类特殊的过程 – 终结例程(Final subroutines)。终结例程主要用在对象被终结时完成相应的资源释放和清理操作,其定义方式为:
FINAL [ :: ] sub1 [, sub2]...
这里sub1,sub2等为终结例程,该例程只能且必须有一个类型为所属派生类型的参数,该参数不能是INTENT(OUT),optional,以及pointer或allocatable。如果参数为数组类型那么其形状和长度必须为假定。
例如下面的程序:
module module_Test
private
public :: type_Test
type :: type_Test
private
contains
final :: dispose0, dispose1, dispose2
end type
contains
subroutine foo(this)
class(type_Test)::this
write(*,*) "In type_test foo"
end subroutine
subroutine dispose0(this)
type(type_Test):: this
write(*,*) "I am disposed!"
end subroutine
subroutine dispose1(this)
type(type_Test)::this(:)
write(*,*) "We are disposed!"
end subroutine
subroutine dispose2(this)
type(type_Test)::this(:,:)
write(*,*) "All are disposed!"
end subroutine
end module
program main
use module_test
type(type_Test) , pointer :: a
type(type_Test) , pointer :: b(:)
type(type_Test) , pointer :: c(:,:)
allocate(a)
deallocate(a)
allocate(b(10))
deallocate(b)
allocate(c(10,10))
deallocate(c)
end
它的输出结果会是什么呢?
- Fortran 2003的新特性 –终结例程 Final subroutines
- Cocos2d-x 3.0final 终结者系列教程14-新的Label-Cocos2d-x官方文档
- perl的subroutines
- Fortran 与C++的混合调用例程对应
- java8,你应该了解的新特性(空指针终结者:Optional 类)
- Cocos2d-x 3.0final 终结者系列教程18-关于V3中CallFunc::create的新的使用方法
- java7新特性--------final重抛
- Calling Fortran function and subroutines from a C or C++ function
- 新的C语言:一切都源于FORTRAN
- 新的C语言:一切都源于FORTRAN
- Hibernate Core 3.6.0.Final Release新特性
- C++11 新特性:显式 override 和 final
- C++11新特性(二)override, final 简单使用
- C++11 新特性:显式 override 和 final
- C++11 新特性:显式 override 和 final
- final特性
- final 特性
- Windows Server 2003的新特性体验
- Linux(CentOS 5.5) Redis 安装及RedisPHP拓展安装应用
- 第一章 代码无错就是优?简单工厂模式(读书笔记)
- linux进程通信-消息
- 几个AR翻译APP
- 获取cookies
- Fortran 2003的新特性 –终结例程 Final subroutines
- 12-1-31进步一小点
- 常见bootloader介绍
- linux进程通信-共享内存
- js设置两个table中的td的宽度
- 小布老师所有视频
- rpm软件包
- java的HashCode方法
- 深入理解sizeof