[問題] 如何使cin>>自訂類別物件時也能夠讀取ꨠ…

看板C_and_CPP (C/C++)作者 (我並不癡0.0)時間15年前 (2010/10/01 17:38), 編輯推噓3(3023)
留言26則, 3人參與, 最新討論串1/1
各位大大晚安~   小弟又有問題來請教~   我使用的是dev c++ 我自訂了一個 class Ts 裡面有個 string STR; 我弄了一個 friend istream &operator>>(istream& in,Ts& r) { in>>r.STR; return in; } 希望能當 Ts A; cin >> A ; 輸入個string的時候 直接存進A.STR裡 但是問題就是雖然這樣可以存 但是要是讀到空白鍵的話 他就直接判定這string結束了 我現在只會用getline(cin,A.STR)來解決 ( 也不能getline(cin,A) , 不會寫/ \ ) 希望可以知道 用 cin >>A ; 就直接存到 A.STR裡 "並且可以讀取空白鍵" 的寫法 感激Q_Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.180.53 ※ 編輯: Sornecronoc 來自: 140.117.180.53 (10/01 17:39)

10/01 18:07, , 1F
首先你可以在 operator>> 裡呼叫getline( in, r.STR )
10/01 18:07, 1F

10/01 18:08, , 2F
來完成你想要的動作, 但是他的行為跟 cin >> 字串很不
10/01 18:08, 2F

10/01 18:08, , 3F
一樣, 所以不建議這麼作
10/01 18:08, 3F

10/01 18:10, , 4F
再來考慮 overloading std::getline, 在重載之前搞清
10/01 18:10, 4F

10/01 18:10, , 5F
他的 prototype :
10/01 18:10, 5F

10/01 18:11, , 6F
1) istream& getline ( istream& is, string& str );
10/01 18:11, 6F

10/01 18:11, , 7F
2) istream& getline ( istream& is, string& str,
10/01 18:11, 7F

10/01 18:11, , 8F
char delim );
10/01 18:11, 8F

10/01 18:13, , 9F
所以你的 prototype 變成這樣 :
10/01 18:13, 9F

10/01 18:14, , 10F
1) istream& getline ( istream& is, Ts& r );
10/01 18:14, 10F

10/01 18:15, , 11F
2) istream& getline ( istream& is, Ts& r,
10/01 18:15, 11F

10/01 18:15, , 12F
char delim );
10/01 18:15, 12F

10/01 18:16, , 13F
因為你的操作對象STR是字串物件, 所以只要呼叫 std 版
10/01 18:16, 13F

10/01 18:17, , 14F
本即可, 最後要回傳 istream 物件本身
10/01 18:17, 14F

10/01 18:18, , 15F
更正 : overloading → overload
10/01 18:18, 15F

10/01 20:58, , 16F
QQ謝謝 我研究看看!!!!
10/01 20:58, 16F

10/01 20:59, , 17F
不過我是希望可以直接用cin>> 完成@@
10/01 20:59, 17F

10/01 21:00, , 18F
不是只有你希不希望, 你設計類別不能自己爽就好, 還要
10/01 21:00, 18F

10/01 21:01, , 19F
如果別人來用, 他會怎麼用, 以及預期要造成什麼結果
10/01 21:01, 19F

10/01 21:02, , 20F
cin >> 把空白吃掉, 就跟重載 + 卻做乘法一樣會讓人暈
10/01 21:02, 20F

10/01 21:02, , 21F
頭轉向
10/01 21:02, 21F

10/01 21:08, , 22F
love神所言甚是...其實現在大家都圖形介面了,cin、cout
10/01 21:08, 22F

10/01 21:08, , 23F
應用的機會不多,let it be
10/01 21:08, 23F

10/01 21:12, , 24F
= =|| 我哪是...
10/01 21:12, 24F

10/01 21:13, , 25F
講起來很順
10/01 21:13, 25F

10/01 21:26, , 26F
喔喔!!! 我懂了!! 所以還是用getline比較好~~~
10/01 21:26, 26F
文章代碼(AID): #1CfQmCvj (C_and_CPP)
文章代碼(AID): #1CfQmCvj (C_and_CPP)