问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Fortran OOP-03:继承和多态

发布网友 发布时间:2024-09-30 20:44

我来回答

1个回答

热心网友 时间:2024-10-15 00:58

一个简单的继承示例

Fortran 2003引入了新关键字“extends”,主要为了实现继承功能。

在Fortran中,类的成员函数默认可以被重写(override)。若想禁止重写,则需要使用另一个关键字“non_overridable”。

抽象类

类继承的起点除了通常的类之外,还可以是抽象类。以下是一个示例:

在这个例子中,抽象类没有成员变量,实际上成员变量是允许的。抽象类的成员函数可以是抽象接口(如array_size),也可以是真实的函数(如real64_arr_data_kind)。抽象类也可以继承自另一个抽象类。

定义抽象接口的语法如下:

其中,抽象接口之外的所有类名、函数名、变量等都需要使用import :: 语法引入到抽象接口的定义中。

在抽象类中定义抽象接口使用如下语法:

其中,drferred关键字是必须的,它似乎只在这里使用。

抽象子类不需要实现抽象接口,而一般子类则必须实现抽象接口,否则编译不通过。对于非抽象接口的函数kind,子类可以实现,也可以不实现;若不实现,则采用父类的这个函数。

再次理解class关键字

class关键字如果在传递参数时使用,表示这个参数可以是这个类以及其所有子类。而type参数表示只能是这个类本身。

由于Fortran没有类似final的关键字,所以所有类都存在被继承的可能性。因此,类的成员函数必须使用class参数。

多态指针

class关键字除了在传递参数时使用,还可以用来定义多态指针。以下是一个示例:

可以看到,alice的类型声明为class(People), allocatable,而不是某个type。在后面,它可以申请内存为基类,或者子类,并且表现出对应类型的行为。

Fortran的allocatable本质上是类似指针的,只是它有一些与pointer不同的语法糖。需要申请内存的工作,allocatable通常是心智负担更少的一个选择。

select type语法

实际上,前面的语法已经可以实现大部分的多态功能了。

select type是对Fortran多态功能的进一步拓展。以下是一个示例:

实际上,上述功能完全可以通过重载来实现。不过由于Fortran的重载写起来比较笨重,增加这样一个语法也可以理解。

class(*)语法

class(*)语法是select type语法的进一步增强。以下是一个示例:

我个人是不太喜欢这个语法的,不过不少人拿它当做any类型用。因为class(*)也可以用于变量定义,所以可以由此定义一个无限任意类型的容器,比如:

这个特性也被称为无限多态。

总结

Fortran的继承和多态功能总体上还不错。它没有多继承,不多这种*语法大多数语言也不支持。select type和class(*)有点*,但也是Fortran语法糖不足不得已而为之,建议谨慎使用。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
母亲55岁得了糖尿病,吃药控制在9以内,最近有点效果不好,到13点几了... ...很害怕发展成糖尿病足,有什么方法控制血糖吗? 我的妈妈得了糖尿病,那个什么值8点多,似乎不能治好,那么如果能控制血糖... 由糖尿病引起的白内障怎样才能控制?最好用中药的方法或者说按摩哪个穴位... 新凯美瑞2.5发动机和8自动变速箱是进口的吗? 网页图片下载神器!图片收集与管理利器Eagle ...怎么弄到自己的电脑里面去自己玩,不用4399游戏盒。 关于足部反射区,懂中医的入 脚部反射区图解图片 足部反射区疼痛怎么办 红茶要怎样泡红茶的几种基本泡法分享 怎样冲泡红茶?红茶的冲泡方法介绍 红茶简单泡法 方便的红茶冲泡法 袋包红茶的正确冲泡方法 起点十大神和准神名单 “起点十大神”和“准神”都有谁 初中生怎么查自己的中考成绩? 白松发展历程 ...50 闪迪U盘被写保护不能复制文件也不能删除格式化也不行,也找不到... 怎么把表格里的内容下拉选择多选? 一个长方形长160米宽80米按1:40缩小后的面积是多少(两种方法)? 32×3= 400×5= 40÷8= 300×9= 960-160= 580+80= 840-240= 75+25=... 480÷40等于1x40得40。有空横线在80在80上面,各位得二,最后下面写一个... 因为80÷40=2,(80÷4)÷(40÷4)=20÷10=2这个叫做什么的性质? 80÷40×2为什么不等于1? 为什么我的笔记本电脑无线网图标不见了,网上邻居里也没有,电脑属性中的... ...图标·都没有乐 邻居上也没有本地 和无线连接只有宽带 高手帮忙啊... 笔记本里的无线网络图标不见了,网上邻居里也没有无线网络了。。HP的本 ... 键盘右侧的数字键打不出数字了 而且按了Numlock键 但是那个绿灯就是不... HP的本本 电脑右下角的无线网络图标不见了 然后网上邻居里面也没有无线... 计算机等级考试中,为什么不考 Fortran? 笔记本强制关机后开机一直这样怎么办 清朝岁贡生,""户部铨选外翰""是什么意思 笔记本刚才嘟嘟嘟一直叫死机 强制关机后重启就出现这个什么情况_百度... 怎么给自己的电脑设置键盘锁?就是人走开后几分钟自动上锁,别人要动必须... 上呼吸道感染不流鼻涕不发热,咳嗽有黄痰吃什么药好 用了PS4玩2K的话是不是不能打补丁了 ...很喜欢听雨声、麻烦帮我想个有个性点的网名、^_^!最好是4个字滴... 请大家帮我起一个网名,我热爱大自然,想过隐士的生活,低调,安静,男性,谢... 我的网名是:聆听、雨声,想找个性签名和空间名称 空间描述 怎样把坐标图表横向变成纵向的?? 怎么把Excel表的横坐标改成纵坐标呢? 板鞋磨脚后跟怎么办有什么实用的小技巧解决 奔图p2206nw怎么无线连接电脑 店面监控问题,高分求助 求32路以上免费视频监控软件下载地址或软件名,视频卡是:天敏SAA7134 tv... 用网络用语两个各写一句话 ...装监控这样做是不是违法的?是不是。有没有人知道。 照样子,用比喻和排比这两种修辞手法写一些你所观察的春雨 物联网卡的APN怎么设置?