看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 過去我都會用 typedef pair<int,int> MyType; 來定義我要的pair型態 但是這樣存取還是會遇到 xxx.first 跟 xxx.second 這樣的存取方式 很不好懂 我希望可以用 xxx.height 跟 xxx.weight (我用身高跟體重舉例)來存取它 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) g++ 不過希望正常的compiler都能用XD 有問題的code: (請善用置底文標色功能) 這是我依照想法寫的 struct MyType: public pair<int,int>{ MyType():height(first),weight(second){} MyType(int h, int w):height(first),weight(second){height=h, weight=w;} MyType(pair<int,int> p):height(first),weight(second) {height=p.first,weight=p.second;} int &height, &weight; }; 補充說明: 我的想法是用reference來達成目的, 第一個constructor是基本的給定reference 第二個constructor則是為了跟pair(const T1 &a, const T2 &b)相容 第三個則是希望MyType可以跟pair互換 (因為我用繼承 所以MyType當成pair<int,int>用應該是沒問題才對) 但是寫完以後我發現: 1. height(first),weight(second) 這段初始化我要寫3遍 感覺很蠢 但是我不知道該怎麼樣才能讓他們用同一段程式初始化一個reference 2. 這樣寫起來好囉唆....有沒有辦法可以更簡潔的達成我的目的呢? 麻煩各位指點一下迷津...小弟對C++不太熟 Q_____Q 謝謝了<(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.16.250
loveme00835:如果是reference, 你就只能這樣做囉, 不然可以不要用 05/08 18:33
akasan:沒必要執著於使用pair吧?? 05/08 18:34
loveme00835:reference, 直接用inline member function:height() 05/08 18:34
CrBoy:那有沒有其他方式可以達成我要的目的呢?就只是換個名字... 05/08 18:34
loveme00835:、width() 來把資料成員first、second包裝起來 05/08 18:35
loveme00835:看錯原來是重量@@ 05/08 18:36
CrBoy:loveme00835: 不要緊 是我例子舉得不好XD 這麼做的確解決了1 05/08 18:39
CrBoy:那有沒有辦法進一步解決2呢? 05/08 18:39
loveme00835:在每個版本的建構式, 都只呼叫父類別的建構式即可 05/08 18:41
CrBoy:akasan: 您說的好像也有道理...當初會用pair應該是懶得寫 05/08 18:42
CrBoy:多餘的comstructor....結果現在反而更麻煩XD 05/08 18:42
loveme00835:像這樣 : MyPair( pair<int,int> p ) : pair<int,int> 05/08 18:45
loveme00835:( p ) { /* empty body */ } 05/08 18:45
firose:pair 又沒有特異功能. 既然都要重包了, 自己重寫一個不是比 05/08 19:02
firose:較自在? 05/08 19:02
CrBoy:感謝樓上各位 我好像真的耍了很大的笨XD 05/09 03:25