看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《funkyslap (平凡是淋漓盡致的美)》之銘言: : 問題(Question): : 1.想請問建構子的作用是不是針對”類別”內所設定的屬性,產生出物件的時候 :   :  做初始化的動作,除了這個作用還有別的嗎(請問我這個觀念是正確的嗎)? : 例: 我覺得就是這樣沒錯 : 2.之前上課老師寫的順序是這樣,想請問這樣編寫是會有影響還是沒有影響的? : 例: :   class person : { : 建構子; :     解構子; : 屬性; :    行為; : } 順序應該是不影響程式結果, 不過成員的宣告順序和 private, public 等都會影響行為 只要在建構子的時候不要有順序相依性, 然後沒有指標直接存取 member 的 hard core,調換順序應該不用太擔心 舉例 int a; int b; ctor(const int tA) : a(tA), b(a) {} 這樣子 b 會受 a 是否初始化而影響,除了極少數情況外, 一般而言這樣不好,而且也不好維護。 極少數情況包括 b 本來就需要關連到 a,但 b 具有 const 性質或本身是引用, 所以要仔細安排 a, b 的順序,但是要註解清楚 : 問題點:這樣建構子寫在前面是不是編譯會有問題,順序是不是要調整? : 3.看過建構子帶參數的狀況,什麼情況下會有這種情形出現?? :  可以舉個例子讓我了解嗎?? :  以上問題,謝謝回答,感恩。 如果需要一些外部參數才能初始化本身的 member 的時候,就像上面的 tA 另外希望在很前面就開始執行函數的時候,比如說 main 之前, 可以宣告一個全域變數寫在建構子(常用) class MyType { public: T1 a; T2 b; MyType() { // do something; } } my_global_var; 但由於不同全域變數很難保證彼此的初始化順序, 所以也可以把它們收集到同一個 class 透過調整 member 順序來保證初始化順序(依照領域,但大部分少用)。 這是我所知道實務上最簡單的寫法,請參考。 ※ 編輯: applecool 來自: 123.110.215.144 (11/08 07:32)
diabloevagto:data member初始化的順序是以宣告的順序為主,而不是 11/08 12:32
diabloevagto:以initialization list中的順序 11/08 12:32