看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《ieck (殺手)》之銘言: : 想請問 有關C++ 類別中的複製建構函式 ^^" : 寫了一段程式碼 (以下為簡略版本) : class TIME{ : public: : int hour; : int min; : int sec; : double prob; : }; : 以上這些資料 皆會由讀檔而來! 我猜讀檔敘述應該像這樣: ifstream file("..."); TIME t; file >> t.hour >> t.min >> t.sec; : 因為目前想將第一次的資料再拿出來做別的計算 : 所以會再增加一個函式 把資料copy出來 : 上網查了一下語法 程式碼更改為(以下為簡略程式碼) : class TIME{ : public: : int hour; : int min; : int sec; : void copy(TIME &); : }; : void TIME::copy(TIME &jump){ : hour=jump.hour; : min=jump.min; : sec=jump.sec; : } TIME c; t.copy( c ); // 把讀進來的資料(已經存在t裡), 複製給c 以註解中的語意而言, TIME::copy() 的程式碼會長成這樣: void TIME::copy( TIME &jump ) { jump.hour = this->hour; jump.min = this->min; jump.sec = this->sec; } 註:資料流向 tc 這點你並沒錯, 只是這樣method名稱應該取得更好一點: t.copy_to( c ); 若是原本的實作碼, 方法命名應該為: c.assign_by( t ); void TIME::assign_by( TIME &jump ) { this->hour = jump.hour; this->min = jump.min; this->sec = jump.sec; } 註:資料流向 tc 達成一樣的效果, 因為物件通常為 noun, 和不及物動詞間要加入 介系詞, 這樣從敘述也才可以直觀就看出意圖. 不管你怎麼寫, 資料流向才是主要需要思考的地方, 程式碼長相還 只是其次, 你會發現上面程式碼中黃色的運算元始終在等號右邊 這情況下實作碼一改表示呼叫語法也要跟著變, 你就是指望呼叫語 法一定要一樣, 才會對不同的實作碼有意見 : 主要想不通的點是..... : 一開始讀檔 資料不是先存在hour了嗎??? : 那為什麼複製資料的寫法不是 jump.hour=hour之類的? (右邊丟給左邊) : 就像宣告變數 int i=5; : 就是從右邊看到左邊 , 把5這個數值指派給 i : 為什麼在class裡面 卻好像變成 左邊丟給右邊 ???? : 可否請高手們解釋原由 : 讓我這個笨腦袋瓜可以理解 不然我老是覺得怪怪的 ><" : 謝謝您~ : PS:我知道可能有很多漂亮的寫法 : 可是我只想問這個點 不然真的睡不著阿@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115
tropical72:只有一個 copy 真的是折磨啊! 10/29 21:58
※ 編輯: poyenc 來自: 140.121.197.115 (10/30 00:33)
ieck:P大 謝謝您~~!!! 11/01 18:25