[問題] C++ 複製建構函式的語法 ?!

看板C_and_CPP作者 (殺手)時間14年前 (2011/10/29 01:12), 編輯推噓1(1054)
留言55則, 10人參與, 最新討論串1/2 (看更多)
想請問 有關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

10/29 01:21, , 1F
TIME::TIME(const TIME& jump); //ctor for copy
10/29 01:21, 1F

10/29 01:24, , 2F
這是 jump 複製給 TIME 型態的物件。
10/29 01:24, 2F

10/29 01:31, , 3F
TIME& operator=(const TIME& jump);//C++設定運算子
10/29 01:31, 3F

10/29 01:34, , 4F
不用懷疑,都是從右邊丟給左邊 (∩_∩)
10/29 01:34, 4F

10/29 01:56, , 5F
john大 我還是不太懂你寫的ㄟ =.=?
10/29 01:56, 5F
我想表達的是說 用了一個新的 就是jump.hour來存 原先的hour 為什麼不是寫 jump.hour(未知)=hour(已知) 右邊丟到左邊 ?! ※ 編輯: ieck 來自: 111.255.137.85 (10/29 01:58)

10/29 02:03, , 6F
因為function(verb)的主被動你弄反了, 特定操作會有慣用法
10/29 02:03, 6F

10/29 02:13, , 7F
P大 不好意思 可以再請你解釋清楚一點嗎? 還是~~~~ 我
10/29 02:13, 7F

10/29 02:14, , 8F
我應該先搞懂某些部份?! 不然...您所解說的 我還是不明所以?
10/29 02:14, 8F

10/29 08:30, , 9F
意思是a.copy(b)你可以想成a=b而非b=a
10/29 08:30, 9F
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)

10/29 09:04, , 10F
我認為你的copy可以分成copyTo與copyFrom兩種語意,可能
10/29 09:04, 10F

10/29 09:05, , 11F
你自己要去想一想你的copy語意是什麼,再來實做你的copy
10/29 09:05, 11F

10/29 09:05, , 12F
function,這樣就不會弄混了!
10/29 09:05, 12F

10/29 09:06, , 13F
還有C++有所謂的copy constructor,可以善用.
10/29 09:06, 13F
會一直混淆 就是我都覺得如果這樣子看 hour=jump.hour 就跟i=5的意思是一樣阿 ><" 就是右邊丟給左邊阿 可是我明明就是要把第一次讀檔的資料 hour丟給jump.hour 存起來 越想越混亂 @@" 邏輯真的有夠差的..... ><" ※ 編輯: ieck 來自: 111.255.137.85 (10/29 09:13)

10/29 09:49, , 14F
function有所謂input與output,你只能把output給到某個地
10/29 09:49, 14F

10/29 09:50, , 15F
方去,例如某變數或某struct變數(都是記憶體區塊),只是在
10/29 09:50, 15F

10/29 09:50, , 16F
function實作時,你是用return value或pass by address (
10/29 09:50, 16F

10/29 09:51, , 17F
pointer ) 或 pass by reference, 就要看你怎麼用了.
10/29 09:51, 17F

10/29 09:52, , 18F
你要知道你只能把插座上的電接電線給到燈泡去讓燈發光,
10/29 09:52, 18F

10/29 09:53, , 19F
你不能把燈泡接到沒有電的插座上要燈泡發光給插座的!
10/29 09:53, 19F

10/29 09:54, , 20F
我這種比喻你想通你就知道什麼東西該怎麼接了.
10/29 09:54, 20F

10/29 09:55, , 21F
嗯,當然function在宣告還是可以讓你宣告成void f(void),
10/29 09:55, 21F

10/29 09:56, , 22F
但其實它內部還是有對某些input做出某些output的.
10/29 09:56, 22F

10/29 09:56, , 23F
除非你寫void f(void) {}, 就是什麼都沒做...
10/29 09:56, 23F

10/29 09:58, , 24F
邏輯觀念除了可靠多練習寫程式建立,平時也可多思考事情
10/29 09:58, 24F

10/29 09:58, , 25F
的脈絡以及從與人來往交談等來建立. 加油!
10/29 09:58, 25F

10/29 10:00, , 26F
修正一下"要燈泡發'電'給插座"...
10/29 10:00, 26F

10/29 10:22, , 27F
建議可以查一下this指標,在class內的資料都會偷偷家
10/29 10:22, 27F

10/29 10:22, , 28F
加上this
10/29 10:22, 28F

10/29 13:43, , 29F
妳好像把source 跟 target 用反了~
10/29 13:43, 29F

10/29 14:20, , 30F
target 不就是jump.hour嗎? source不就是hour嗎?
10/29 14:20, 30F

10/29 14:20, , 31F
那不就是右邊丟到左邊去 jump.hour=hour嗎???
10/29 14:20, 31F

10/29 14:21, , 32F
天阿~~~ 我到底是卡在哪裡? 好痛苦阿~~~ 我完全不懂各位
10/29 14:21, 32F

10/29 14:22, , 33F
想表達的意思 一整個腦袋裝大便??? 到底為什麼我就是想不通?
10/29 14:22, 33F

10/29 14:24, , 34F
我想網友的意思是, 程式都是你寫的, 要做什麼內容由你自
10/29 14:24, 34F

10/29 14:24, , 35F
己要先訂義清楚. 就像你說你想寫個copy method, 你要先
10/29 14:24, 35F

10/29 14:25, , 36F
想/說清楚, 你要寫出來像 obj.copy(x); 的code時, 你到
10/29 14:25, 36F

10/29 14:26, , 37F
底是想要做copy_from, 還是copy_to的動作; 也就是上面的
10/29 14:26, 37F

10/29 14:26, , 38F
code, 你到底是要做x的資料copy給obj, 還是要把obj的資
10/29 14:26, 38F

10/29 14:27, , 39F
料copy進x; 無論是copy_to或copy_from都無關對錯, 但是
10/29 14:27, 39F

10/29 14:27, , 40F
不定義清楚, 可能會實作成剛好完全相反的結果.
10/29 14:27, 40F

10/29 14:29, , 41F
所以你不能上網隨便找個copy的範例就亂抄, 因為人家實作
10/29 14:29, 41F

10/29 14:29, , 42F
的未必是你所想作的, 這樣你當然怎麼看怎樣奇怪XD
10/29 14:29, 42F

10/29 14:31, , 43F
關於這點, 回你文的 poyenc 板友已經給你明確的範例了:)
10/29 14:31, 43F

10/29 17:39, , 44F
真心建議原 PO 努力去看懂下一篇回文, 想法轉個彎就好
10/29 17:39, 44F

10/29 21:50, , 45F
VictorTom你果真了了我(了解了我)...ieck我私信暫不回你
10/29 21:50, 45F

10/29 21:51, , 46F
了,真要說到你明白,我可得多花腦筋了,真抱歉啦!
10/29 21:51, 46F

10/29 21:52, , 47F
legnaleurc的建議很好,ieck你就多看下一篇回文好好想一
10/29 21:52, 47F

10/29 21:53, , 48F
想,有些事情真急不得的,學程式語言就是如此.
10/29 21:53, 48F

10/31 17:10, , 49F
可能卡在某個點 然後就會慌了 然後會煩燥的爆炸 (同類)
10/31 17:10, 49F

10/31 17:11, , 50F
會不會是ieck 他知道 式子的目標與來源為何 只是想問
10/31 17:11, 50F

10/31 17:12, , 51F
寫法怎樣才對?! 我是個半吊子 所以猜一下初學者的心態
10/31 17:12, 51F

10/31 17:13, , 52F
我想會不會是ieck看了一些範例 然後糾結在那些寫法
10/31 17:13, 52F

10/31 17:14, , 53F
不如參考P大的範例 試著寫看看~!?
10/31 17:14, 53F

10/31 17:15, , 54F
我的解釋 不知道對不對 煩請樓上各位高手確認 XD
10/31 17:15, 54F

11/01 18:25, , 55F
謝謝各位高手 熱心地指教 ! 真的非常感謝~~~ ><"
11/01 18:25, 55F
文章代碼(AID): #1Egk9o2I (C_and_CPP)
文章代碼(AID): #1Egk9o2I (C_and_CPP)