Fortran Coder

查看: 8367|回复: 4

[面向对象] interface assignment 和interface operator写为type-bound procedure形式

[复制链接]

17

帖子

4

主题

0

精华

熟手

F 币
186 元
贡献
105 点
发表于 2016-4-20 15:20:47 | 显示全部楼层 |阅读模式
使用interface assignment 以及interface operator可以为type定义操作符和赋值符;
但是如何将其写为type-bound procedure的形式呢?
QQ截图20160420151419.png
这个是书本的例子,但是肯定是错误的,至少没有用procedure语句声明assign1,plus1,plus2,plus3;
另外即便绑定之后还存在passed-object dummy argument的问题。
似乎这一块跟面向对象关系挺大,不是很明白,还请教懂的大神告知如何操作?

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2016-4-20 17:06:50 | 显示全部楼层
就像书上的例子就可以了。
加上 Procedure :: assign1,plus1,plus2,plus3

17

帖子

4

主题

0

精华

熟手

F 币
186 元
贡献
105 点
 楼主| 发表于 2016-4-21 08:55:46 | 显示全部楼层
但是后面很奇怪啊,这是IVF14.0的手册,不能有nopass属性,我就理解成必须有pass属性
QQ截图20160421084922.png
一个操作符必须有pass属性我是着实没明白意图。最后只能这样
type::vector
    real::x
    real::y
    real::z
    contains
    ! type bounded procedures
    generic::assignment(=)=>array_to_vector,vector_to_array
    generic::operator(+)=>vector_add
    generic::operator(-)=>vector_subtract
    generic::operator(*)=>vector_times_real,real_times_vector,vector_times_int,int_times_vector,cross_product
    generic::operator(/)=>vector_div_real,vector_div_int
    generic::operator(.dot.)=>dot_product_
    procedure,pass(vec_result)::array_to_vector
    procedure,pass(vec_1)::vector_to_array
    procedure,pass(vec_1)::vector_add
    procedure,pass(vec_1)::vector_subtract
    procedure,pass(vec_1)::vector_times_real
    procedure,pass(vec_2)::real_times_vector
    procedure,pass(vec_1)::vector_times_int
    procedure,pass(vec_2)::int_times_vector
    procedure,pass(vec_1)::cross_product
    procedure,pass(vec_1)::vector_div_real
    procedure,pass(vec_1)::vector_div_int
    procedure,pass(vec_1)::dot_product_
end type

因为本类型可以在第一个形参也可以是第二个上面,这样可以过编译,但是用起来还不如interface operator了;

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

发表于 2016-4-21 09:48:14 | 显示全部楼层
可以参考这个回答,pass属性应该是编译器默认的
http://stackoverflow.com/questio ... ointer-derived-type
http://stackoverflow.com/questio ... ttribute-in-fortran
个人看法:
没有面向对象编程OOP基础,选择fortran来上手,无异于开奇瑞QQ车去参加F1大赛

17

帖子

4

主题

0

精华

熟手

F 币
186 元
贡献
105 点
 楼主| 发表于 2016-4-21 10:14:54 | 显示全部楼层
pasuka 发表于 2016-4-21 09:48
可以参考这个回答,pass属性应该是编译器默认的
http://stackoverflow.com/questions/5502592/procedure-po ...

谢谢大神给的参考,确实很有帮助。
如您所说,这里还真就是OOP的问题,确实超出我现有能力了,所以暂时放下这个,不去纠结了。
fortran学了快两年,还差指针和oop没学···
没办法,本人有繁重的任务,抽空才能学点新东西,磨刀的时间都过去了。。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-29 23:02

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表