【发布时间】:2018-11-07 22:19:20
【问题描述】:
我从 Fortran 2008 开始,我在 OOP 方面遇到了很大的困难。看来,在 2008 年语言标准中解释一个非常基本的 OOP 概念的资料很少。
我找到了关于继承的信息,但是我找不到任何关于多态性的信息。
所以如果我想在 C++ 中重载一个函数,我可以这样做(来自 Wikipedia 的示例):
// volume of a cube
int volume(const int s)
{
return s*s*s;
}
// volume of a cylinder
double volume(const double r, const int h)
{
return 3.1415926*r*r*static_cast<double>(h);
}
// volume of a cuboid
long volume(const long l, const int b, const int h)
{
return l*b*h;
}
但是,我应该如何在 Fortran 2008 中做同样的事情?
【问题讨论】:
-
我现在没有时间回答这个问题,但是如果您访问 Portland Group 网站并在周围搜索一下,您会发现几年前写的一些文章可能是最好的介绍材料免费提供的 Fortran OOP 主题。
-
您的示例并不是真正的“OOP”,但 generics 的概念(从 Fortran 90 开始)将是合适的。这里可能有一组很好的问题来解决它们的基本用途,但你肯定会发现很多问题都将它们放在心上。
-
此外,您提到了“多态性”,但在您的示例中与(Fortran 的)多态性没有任何关系。您是在询问如何在 Fortran 中执行与 C++ 示例相同的操作,还是询问如何解决存在多态性的过程? [这是两件相关的事情,但又足够不同,以至于作为一个问题涵盖两者可能过于广泛。]
-
@francescalus 好的,很抱歉让您感到困惑。我在问,我怎样才能重载函数以具有相同的标识符,但不同的参数。我提到了 OOP,因为我打算将它主要用于方法重载。
-
以下是@HighPerformanceMark 提到的链接:Code Reusability、Data Polymorphism(可能与您的特定问题最相关)、Parameterized Derived Types 和 User-Defined Derived Type Input/Output
标签: fortran polymorphism overloading fortran2008