回 帖 发 新 帖 刷新版面

主题:[讨论]interface中的问题,求指导

在interface 用法中当有自定义操作符(就是将操作符设置为虚拟函数)
比如 
     (1)
module ******
interface operator(+)
module procedure add1
module procedure add1
    
 (2)
interface assignment(=)
module procedure time_assignment_real
module procedure real_assignment_time
为啥书上写的是add1和add2是必须函数,因为数学运算a+b必须要返回一个结果到程序中
而time_assignment_real与real_assignment_time必须是子程序,而不是函数,因为要接受2个参数,(然后进行处理)(自己补充的)

我的问题是:
1. 函数与子程序有啥区别,是否是函数能返回一个数值而子程序不能,函数只能进行算数运算呢(请详细比较下)
2.程序中调用这些自定义操作符都不用CALL吗,即使是像(2)这种情况是子程序的时候?
[em1]

回复列表 (共6个回复)

沙发

有木有人啊,求指导啊

板凳

1、函数与子程序大多数情况下只有一个差别:一个有返回值,一个没有。
2、这种是运算符重载,是不用call的。

3 楼

谢谢啦,不过我对于第一个问题还有点模糊啊
返回值不明白啊能区分下吗
比如call sub1(1)
subroutine sub1(a)
implicit none
a=a+1
return
end
不也有返回的值吗?
[em10]

4 楼


补充:同时问下主程序中
 c=call sub(1)
可以这样写不?

5 楼

subroutine是没有返回值的. 或者通过多个变量进去,多个变量沿路返回.
sub(1) 里面的1是常量不可以被修改. 还要指出指程序没有对a定义.

不可以写成c=call sub(1)的.

强烈建议先翻翻书看子程序和函数那章. 搞清楚这些再搞重载.

6 楼

好的谢啦

我来回复

您尚未登录,请登录后再回复。点此登录或注册