Re: [問題]怎麼設定物件陣列初始值

看板C_and_CPP作者 (最愛朴素妍)時間13年前 (2011/02/20 10:09), 編輯推噓3(305)
留言8則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《cool79518 (吃飯睡覺打東東)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 問題(Question): : 有搜尋過板上,但是沒有我要的答案。 : ,我想給定物件陣列的初始值,如果要像一般把陣列內容的值都設0等方式要如何設定? : 餵入的資料(Input): : 預期的正確結果(Expected Output): : 錯誤結果(Wrong Output): : 程式碼(Code):(請善用置底文網頁, 記得排版) : http://nopaste.csie.org/8879a : 補充說明(Supplement): 誤會大了, 陣列給初值有4種情況: 1.不給初值 Object b[ 3 ]; 呼叫該類別的 trivial ctor來建構物件, 除非你寫了 default ctor , 不然不做任何初始化動作. 2.用 trivial ctor初始化各元素 Object b[ 3 ] = {}; 與(1)類似, 不過內建的數值型態都會被初始化為0. 3.所有元素都給初值 Obecjt b[ 3 ] = { Object("1"), 2, 3.0 }; 每一個元素在建構時都呼叫1個參數的建構子, 用初值的型態來決定 要呼叫的版本. 4.只給部份的初值 Object b[ 3 ] = { 1 }; 第0個元素以「參數為1個整數的建構子」來建構, 其餘的元素皆用 trivial ctor 來建構.( (2)跟(3)的綜合體 ) 元素一多用上面的 case 3就不切實際了, 下面提出 3 種解法, 不過 語意都不太一樣. 1.使用 default ctor來建構物件, 並用靜態成員來當作初值的來源 (不推薦使用) http://codepad.org/2Nk0txRQ 2.使用 default ctor來建構物件, 建構結束再賦予新值, 需要 copy assignment (效率較差). http://codepad.org/16WP8ar5 3.再來是我覺得比較好的方法, 使用 std::uninitialized_fill直接 建構物件, 不需要你硬寫 default ctor, 缺點就是要注意 new 和 delete 要成對, 以及離開前要記得呼叫解構子. http://codepad.org/3cIgObOk 另外也可以考慮 std::allocator<T>, 要做的工作「比較」少一些. -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢██ 歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████花英 ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115

02/20 11:31, , 1F
謝謝大大指教,可能是我程度還不夠,有看沒有懂..
02/20 11:31, 1F

02/20 12:34, , 2F
學習 c++ 的話, 你要看很多的書XD...
02/20 12:34, 2F

02/20 13:28, , 3F
說不定連初始化設定在大學都能開兩個學分的課了
02/20 13:28, 3F

02/20 13:37, , 4F
不過通常初始化都被教師簡略帶過,自己看書咖實在
02/20 13:37, 4F

02/20 14:26, , 5F
akasan大大能推薦幾本書書給我嗎? XD
02/20 14:26, 5F

02/20 18:04, , 6F
推還沒好建構物件XD
02/20 18:04, 6F

02/20 18:05, , 7F
不過default ctor 很多場合很好用啊~
02/20 18:05, 7F
@.@ 原來打錯字了

02/21 18:39, , 8F
學習 c++ 的話, 你要看很多l大寫的文章XD
02/21 18:39, 8F
我的文沒什麼內容阿...Orz ※ 編輯: loveme00835 來自: 140.121.197.115 (02/21 18:58)
文章代碼(AID): #1DO7VPWg (C_and_CPP)
文章代碼(AID): #1DO7VPWg (C_and_CPP)