這是我關於Fortran的第二個問題(我使用C++,所以請原諒我的思維方式)。Fortran派生類型實例的用戶自定義構造函數
我想在適當的時候在Fortran中使用OOP來表示派生類型。 在C++中,您可以使用用戶定義的構造函數,如https://msdn.microsoft.com/en-us/library/s16xw1a8.aspx
在Fortran中,情況有所不同。 我嘗試的第一件事是從這裏: https://www.ibm.com/developerworks/community/blogs/b10932b4-0edd-4e61-89f2-6e478ccba9aa/entry/object_oriented_fortran_user_defined_constructors2?lang=en
然後,我發現一些其他的方式來做到這一點。 這裏我列出了一些方法得體的工作,但我只測試了第一和第二:
- 具有相同的名稱,他們應該構建,看到上面的鏈接派生類型通用接口;
利用類型綁定過程(這甚至不是一個「傳統」的構造函數)
MODULE mymod TYPE mytype Private INTEGER :: x CONTAINS PROCEDURE, PASS :: init END TYPE CONTAINS SUBROUTINE init(this, i) CLASS(mytype), INTENT(OUT) :: this INTEGER, INTENT(IN) :: i write(*,*) this%x IF(i > 0) THEN this%x = 1 ELSE this%x = 2 END IF write(*,*) this%x END SUBROUTINE init END PROGRAM test USE mymod TYPE(mytype) :: y CALL y%init(1) END PROGRAM
使用靜態構造函數或結構構造函數(http://www.lahey.com/docs/lfenthelp/NLMOvUsInvConst.htm) 但現在看來,這不是一般的Fortran http://www.lahey.com/docs/lfenthelp/NLMGSWhatIs.htm
所以我還沒有很好地理解什麼是最優先和靈活的方法來初始化/構造派生類型在實踐中,特別是當我在開發中使用嵌套派生類型pment。我希望我能在一些幫助下組織這個話題。
你看過https://stackoverflow.com/問題/ 4262253 /如何重寫結構構造器中的fortran和其他相關的問題和答案? Wildcat的答案包含*很多材料,甚至與C++和Java進行比較。我不認爲重複所有這些都是有用的,所以最好縮小你的問題範圍。 –
1和2都可以在實踐中使用。我更喜歡1。 3.不是Fortran,而是Lahey的一些特定語言。 Fortran中的OOP比C++中的OOP(統計OOP程序員的數量)要少得多,你不能期待這麼多形式化的規則。人們仍然在找到他們最好的方法。另外不要忘記,*基於觀點的問題在Stack Overflow *中是無關緊要的。 –
@VladimirF,是的,的確,我的一些想法實際上來自於Wildcat的答案。 – Chang