作者poyenc (高髮箍)
看板C_and_CPP
標題Re: [問題] C++ 複製建構函式的語法 ?!
時間Sat Oct 29 02:19:07 2011
※ 引述《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;
}
註:資料流向
t →
c
這點你並沒錯, 只是這樣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;
}
註:資料流向
t →
c
達成一樣的效果, 因為物件通常為 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