2017-12-24 43 views
1

공용 프로 시저 f가 정의 된 유형 A를 처음 정의했고 A에 결합 될 수도 있다고 가정합니다. 다른 모듈에서이 유형이 B로 확장되었습니다. 그러나 유형 B를 사용할 때 f 노출 될 수 있습니다. 그건 그렇고, 나는 하위 기술을 사용하고 싶지 않아.Fortran에서 확장 정의에서 공개 프로 시저를 비공개로 설정하는 방법은 무엇입니까?

보수 :

은 (A) 형 가정 이미 정의되어 다른 모듈 B에서

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

, 우리는 같은 확장이 모듈

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

, F 여전히 수도 사용하십시오. 그러나, 다음, 모듈 MC에서 내가 사용

type(B)::Ob 

을 (선언)하고 나는 불법하고자 "() 산부인과 % f를 호출". 또는 동등하게 말해서, 나는 클래스를 확장 할 때 함수의 일부를 금지하려고합니다.

+1

예제 코드를 보여주십시오. 항상 그렇게하십시오. 코드 그림은 긴 설명보다 항상 좋습니다. –

+0

가능한 해결 방법은 "stop"문을 자식 클래스의 "f"메서드에 넣는 것일 수 있습니다? 또 다른 해결 방법은 상속보다 컴포지션을 사용하여 Ob % f()가 구성에 의해 표시되지 않도록하는 것입니다. – roygvib

답변

1

당신의 설명을 이해하기 어렵지만, 정확하게 이해한다면 그것은 불가능합니다.

변수가 class(A) :: o 인 것으로 간주하십시오. 당신은

call o%f() 

class(A)이 다형성 등의 동적 유형 type(B) 수 있습니다 A의 확장 된 형태가 될 수 호출 할 수 있습니다. 따라서 B은 부모와의 호환성을 유지하기 위해 공개적으로 액세스 할 수있는 절차 f을 제공해야합니다.