[Fortran] 纯文本查看 复制代码
TYPE :: Vect
REAL(8),Private :: x
REAL(8),Private :: y
REAL(8),Private :: z
Contains
Procedure,Pass(This),Private :: VectAddVect_Fn
Generic,Public :: Operator(+) => VectAddVect_Fn
End TYPE Vect
Private :: VectAddVect_Fn
Contains
Function VectAddVect_Fn(This,Another)Result(Ans)
CLASS(Vect), Intent(in) :: This,Another
TYPE(Vect) :: ans
ans%x=This%x+Another%x
ans%y=This%y+Another%y
ans%z=This%z+Another%z
End Function
[Fortran] 纯文本查看 复制代码
Module VectClass
Implicit None
private
TYPE , public :: Vect
Real(8) ,Private :: x
Real(8) ,Private :: y
Real(8) ,Private :: z
Contains
Procedure :: set
Procedure,pass(ThisVect),Private :: VectMulScal_Fn , ScalMulVect_Fn , VectMulVect_Fn
Generic, Public :: operator (*) => VectMulScal_Fn , ScalMulVect_Fn , VectMulVect_Fn
Procedure :: writef
Generic :: write(formatted) => writef
Procedure :: abs => AbsVect_Fn
End TYPE
public :: abs
interface abs
module procedure AbsVect_Fn
end interface
contains
function AbsVect_Fn (ThisVect)
type(Vect) :: AbsVect_Fn
class(Vect) :: ThisVect
AbsVect_Fn = Vect( abs(ThisVect%x) , abs(ThisVect%y) , abs(ThisVect%z) )
end function AbsVect_Fn