我正在寻找一种从后代类访问 Fortran 类(Fortran 术语中的派生类型)的私有组件的方法。例如,假设类 A 有一个组件 x,它被声明为私有。现在考虑第二个类 B,它继承自基类 A。在这种情况下,类 B 不能直接访问 x,因此不允许任何尝试访问 B%x。我能想到的两个解决方案是:
(1) 将 x 声明为公开的。然而,这将使 x 全局可访问,这会滥用数据隐藏,因此它被拒绝作为问题的可接受解决方案。
(2) 实现获取/设置A%x的过程,如A%getX()和A%setX()。这不仅麻烦,而且还允许(间接)在程序中的任何地方访问 A%x - 不仅在子类中。
我想要的是一种从 A 的子类访问 A%x 的方法,但否则 x 在其他地方应该是无法访问的。C++ 具有用于此目的的“受保护”属性,但据我所知,Fortran 2003 中的“受保护”属性具有不同的含义(它使 A%x 可以在任何地方访问,并且只保护其值,不能在类之外更改)。