看板 C_and_CPP 關於我們 聯絡資訊
想請問 有關C++ 類別中的複製建構函式 ^^" 寫了一段程式碼 (以下為簡略版本) class TIME{ public: int hour; int min; int sec; double prob; }; 以上這些資料 皆會由讀檔而來! 因為目前想將第一次的資料再拿出來做別的計算 所以會再增加一個函式 把資料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; } 主要想不通的點是..... 一開始讀檔 資料不是先存在hour了嗎??? 那為什麼複製資料的寫法不是 jump.hour=hour之類的? (右邊丟給左邊) 就像宣告變數 int i=5; 就是從右邊看到左邊 , 把5這個數值指派給 i 為什麼在class裡面 卻好像變成 左邊丟給右邊 ???? 可否請高手們解釋原由 讓我這個笨腦袋瓜可以理解 不然我老是覺得怪怪的 ><" 謝謝您~ PS:我知道可能有很多漂亮的寫法 可是我只想問這個點 不然真的睡不著阿@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.255.137.85
johnhmj:TIME::TIME(const TIME& jump); //ctor for copy 10/29 01:21
johnhmj:這是 jump 複製給 TIME 型態的物件。 10/29 01:24
johnhmj:TIME& operator=(const TIME& jump);//C++設定運算子 10/29 01:31
johnhmj:不用懷疑,都是從右邊丟給左邊 (∩_∩) 10/29 01:34
ieck:john大 我還是不太懂你寫的ㄟ =.=? 10/29 01:56
我想表達的是說 用了一個新的 就是jump.hour來存 原先的hour 為什麼不是寫 jump.hour(未知)=hour(已知) 右邊丟到左邊 ?! ※ 編輯: ieck 來自: 111.255.137.85 (10/29 01:58)
poyenc:因為function(verb)的主被動你弄反了, 特定操作會有慣用法 10/29 02:03
ieck:P大 不好意思 可以再請你解釋清楚一點嗎? 還是~~~~ 我 10/29 02:13
ieck:我應該先搞懂某些部份?! 不然...您所解說的 我還是不明所以? 10/29 02:14
CrBoy:意思是a.copy(b)你可以想成a=b而非b=a 10/29 08:30
a.copy(b) 表示b是已知 然後把b的內容copy到a中 是這個意思嗎??? 所以 hour=jump.hour 這個寫法的意思 就是jump.hour(hour) 也就是將hour的資料複製到jump.hour中 ?! ※ 編輯: ieck 來自: 111.255.137.85 (10/29 09:05)
tomnelson:我認為你的copy可以分成copyTo與copyFrom兩種語意,可能 10/29 09:04
tomnelson:你自己要去想一想你的copy語意是什麼,再來實做你的copy 10/29 09:05
tomnelson:function,這樣就不會弄混了! 10/29 09:05
tomnelson:還有C++有所謂的copy constructor,可以善用. 10/29 09:06
會一直混淆 就是我都覺得如果這樣子看 hour=jump.hour 就跟i=5的意思是一樣阿 ><" 就是右邊丟給左邊阿 可是我明明就是要把第一次讀檔的資料 hour丟給jump.hour 存起來 越想越混亂 @@" 邏輯真的有夠差的..... ><" ※ 編輯: ieck 來自: 111.255.137.85 (10/29 09:13)
tomnelson:function有所謂input與output,你只能把output給到某個地 10/29 09:49
tomnelson:方去,例如某變數或某struct變數(都是記憶體區塊),只是在 10/29 09:50
tomnelson:function實作時,你是用return value或pass by address ( 10/29 09:50
tomnelson:pointer ) 或 pass by reference, 就要看你怎麼用了. 10/29 09:51
tomnelson:你要知道你只能把插座上的電接電線給到燈泡去讓燈發光, 10/29 09:52
tomnelson:你不能把燈泡接到沒有電的插座上要燈泡發光給插座的! 10/29 09:53
tomnelson:我這種比喻你想通你就知道什麼東西該怎麼接了. 10/29 09:54
tomnelson:嗯,當然function在宣告還是可以讓你宣告成void f(void), 10/29 09:55
tomnelson:但其實它內部還是有對某些input做出某些output的. 10/29 09:56
tomnelson:除非你寫void f(void) {}, 就是什麼都沒做... 10/29 09:56
tomnelson:邏輯觀念除了可靠多練習寫程式建立,平時也可多思考事情 10/29 09:58
tomnelson:的脈絡以及從與人來往交談等來建立. 加油! 10/29 09:58
tomnelson:修正一下"要燈泡發'電'給插座"... 10/29 10:00
diabloevagto:建議可以查一下this指標,在class內的資料都會偷偷家 10/29 10:22
diabloevagto:加上this 10/29 10:22
villix:妳好像把source 跟 target 用反了~ 10/29 13:43
ieck:target 不就是jump.hour嗎? source不就是hour嗎? 10/29 14:20
ieck:那不就是右邊丟到左邊去 jump.hour=hour嗎??? 10/29 14:20
ieck:天阿~~~ 我到底是卡在哪裡? 好痛苦阿~~~ 我完全不懂各位 10/29 14:21
ieck:想表達的意思 一整個腦袋裝大便??? 到底為什麼我就是想不通? 10/29 14:22
VictorTom:我想網友的意思是, 程式都是你寫的, 要做什麼內容由你自 10/29 14:24
VictorTom:己要先訂義清楚. 就像你說你想寫個copy method, 你要先 10/29 14:24
VictorTom:想/說清楚, 你要寫出來像 obj.copy(x); 的code時, 你到 10/29 14:25
VictorTom:底是想要做copy_from, 還是copy_to的動作; 也就是上面的 10/29 14:26
VictorTom:code, 你到底是要做x的資料copy給obj, 還是要把obj的資 10/29 14:26
VictorTom:料copy進x; 無論是copy_to或copy_from都無關對錯, 但是 10/29 14:27
VictorTom:不定義清楚, 可能會實作成剛好完全相反的結果. 10/29 14:27
VictorTom:所以你不能上網隨便找個copy的範例就亂抄, 因為人家實作 10/29 14:29
VictorTom:的未必是你所想作的, 這樣你當然怎麼看怎樣奇怪XD 10/29 14:29
VictorTom:關於這點, 回你文的 poyenc 板友已經給你明確的範例了:) 10/29 14:31
legnaleurc:真心建議原 PO 努力去看懂下一篇回文, 想法轉個彎就好 10/29 17:39
tomnelson:VictorTom你果真了了我(了解了我)...ieck我私信暫不回你 10/29 21:50
tomnelson:了,真要說到你明白,我可得多花腦筋了,真抱歉啦! 10/29 21:51
tomnelson:legnaleurc的建議很好,ieck你就多看下一篇回文好好想一 10/29 21:52
tomnelson:想,有些事情真急不得的,學程式語言就是如此. 10/29 21:53
ching1027:可能卡在某個點 然後就會慌了 然後會煩燥的爆炸 (同類) 10/31 17:10
ching1027:會不會是ieck 他知道 式子的目標與來源為何 只是想問 10/31 17:11
ching1027:寫法怎樣才對?! 我是個半吊子 所以猜一下初學者的心態 10/31 17:12
ching1027:我想會不會是ieck看了一些範例 然後糾結在那些寫法 10/31 17:13
ching1027:不如參考P大的範例 試著寫看看~!? 10/31 17:14
ching1027:我的解釋 不知道對不對 煩請樓上各位高手確認 XD 10/31 17:15
ieck:謝謝各位高手 熱心地指教 ! 真的非常感謝~~~ ><" 11/01 18:25