2017-12-24 18 views
1

パブリック手続きfが定義されたタイプAを最初に定義し、これをAに結合することもできます。別のモジュールでは、このタイプをBに拡張しました。しかし、タイプBを使用すると、露出させる。 ところで、私はサブドーム技術を使いたくありません。Fortranでは、拡張定義のときにパブリック・プロシージャをプライベートに設定する方法は?

相補:

は、タイプ(A)が既に定義されていると仮定する:別のモジュールBにおいて

module mA 
type::A 
... 
contains 
procedure::f 
endtype 
endmodule 

、我々のようにAを拡張:このモジュールで

module mB 
use mA 
type,extends(A)::B 
... 
endtype 
endmodule 

、F依然としてよいです利用される。ただし、次の、モジュールMCに私が使用

type(B)::Ob 

を(宣言)になると私は違法になりたい "()オブ%のFを呼び出します"。あるいは、同等のこととして、私はクラスを拡張するときにいくつかの関数を禁止したい。

+1

サンプルコードを示してください。常にそれをしてください。コードのイラストは、長い説明より常に優れています。 –

+0

考えられる回避策は、子クラスの "f"メソッドに "stop"ステートメントを置くだけかもしれませんか?もう1つの回避策は、継承よりむしろ構成を使用して、Ob%f()が構造によって表示されないようにすることです。 – roygvib

答えて

1

あなたの説明を理解するのは難しいですが、正しく理解すれば不可能です。

変数class(A) :: oがあるとします。あなたが

call o%f() 

class(A)多型であり、その動的な型がtype(B)できるようAの任意の拡張型を指定できますを呼び出すことが許可されています。したがって、Bは、親との互換性を維持するために、公開アクセス可能な手順fを提供しなければならない。

関連する問題