[問題] 連接兩字串的函式

看板C_and_CPP (C/C++)作者 (於是乎)時間13年前 (2013/04/01 09:25), 編輯推噓0(0027)
留言27則, 3人參與, 最新討論串1/1
試問要讓兩字串可以連接並傳回該新字串, 要如何利用下上面的程式片段達成呢: class String { public: // ... String operator+(const String &rhs) const; // ... }; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.55.23

04/01 14:06, , 1F
string str (lhs); str.append (rhs); return str;
04/01 14:06, 1F

04/01 14:07, , 2F
operator+應該會實作成friend吧? 你用const的member用意是?
04/01 14:07, 2F

04/01 15:44, , 3F
那是題目寫的, 可能是不要去改到原值吧
04/01 15:44, 3F

04/01 15:45, , 4F
請問operator+可以解釋得更清楚一點嗎..謝謝!
04/01 15:45, 4F

04/01 16:02, , 5F

04/01 16:03, , 6F
如果是用char陣列做的話就自己用strcat
04/01 16:03, 6F

04/01 16:26, , 7F
這是C++考題, 應該是要用到已宣告的code
04/01 16:26, 7F

04/01 16:27, , 8F
或許可以朝字元指標,類別物件的方向思考??
04/01 16:27, 8F

04/01 17:48, , 9F
C++的string好像就是用char *做的
04/01 17:48, 9F

04/01 17:48, , 10F
這裡有個簡單例子 http://ideone.com/WFyfqm
04/01 17:48, 10F

04/01 22:08, , 11F
超爛的作業... xD operators 應該視為 methods 的方便
04/01 22:08, 11F

04/01 22:09, , 12F
呼叫 shortcut, 而不是唯一介面. 你提供了 operator+
04/01 22:09, 12F

04/01 22:09, , 13F
但是並沒有 append, 或是 operator= 結果沒有 assign
04/01 22:09, 13F

04/01 22:10, , 14F
一樣弔詭, 介面不一致所以無法提供更完整的抽象化層次
04/01 22:10, 14F

04/01 22:11, , 15F
在實作 operator+ 之前先問問你現在"要做的事情"是什
04/01 22:11, 15F

04/01 22:11, , 16F
麼, 你內部用了怎樣的資料結構, 甚至你要怎麼讓使用知
04/01 22:11, 16F

04/01 22:12, , 17F
到兩個字串已經連接完成? 這些都沒想到就要跳下去寫了
04/01 22:12, 17F

04/01 22:12, , 18F
嗎? 不過像這種爛題目我是直接拒作啦...
04/01 22:12, 18F

04/01 22:16, , 19F
需要用到 friend 就是我說的介面不一致
04/01 22:16, 19F

04/01 22:20, , 20F
@hpps 使用 const 的語意是這個 operator+ 會回傳新值
04/01 22:20, 20F

04/01 22:20, , 21F
而不是讓 *this 字串變長. std::string 不一定是用 C
04/01 22:20, 21F

04/01 22:23, , 22F
字串實作的, 而且 string::size() 通常會 cache 起來
04/01 22:23, 22F

04/01 22:40, , 23F
http://ideone.com/r4Og3F 將struct改成class也行
04/01 22:40, 23F

04/01 22:41, , 24F
會不會那樣就是答案??
04/01 22:41, 24F

04/01 22:59, , 25F
>FacetheFaith, 你可以去看看linux的libstdc++原始碼,
04/01 22:59, 25F

04/01 23:00, , 26F
裡面的bastring.h有很多資訊,上面那些只是簡單的例子
04/01 23:00, 26F

04/01 23:46, , 27F
C++的class和struct不是一樣嗎,差別在一開始的存取權限
04/01 23:46, 27F
文章代碼(AID): #1HME8P92 (C_and_CPP)
文章代碼(AID): #1HME8P92 (C_and_CPP)