Re: [語法] 關於operator==
: 推 LPH66:GetID() 加個 const 宣告如何? (ie. int& GetID() const;) 09/07 13:51
: 推 QQ29:L大 一般不是你 加上const 回傳的地方也該加上 const int &嘛 09/07 14:01
: 推 QQ29:還是只是為了滿足他這case 希望還可以使用==設值@@ 09/07 14:03
: → tyc5116:Q大,我不懂的地方就在於為何回傳值一定要const int& 09/07 15:06
: → tyc5116:因為我在另一個專案測試的時候是不用的,所以我想問一下 09/07 15:06
: → tyc5116:目前這樣compile不過的原因是?? 09/07 15:07
: 推 QQ29:如果你只寫 int &GetID() const; 你可以在外部(main)寫 09/07 15:20
: → QQ29:xxx.GetID()=值 這就失去了你原本寫 const的意義 09/07 15:20
: → QQ29:可以看 effective c++ 條款3 他還有分兩派說法 但是我不太懂 09/07 15:22
: → QQ29:他表達的用意 09/07 15:22
不好意思喔,再問一下,我了解Q大所說的是什麼,但我還是不知道為何我這樣寫不行
再一個類似的例子
class TableA{
public:
TableA(int vAID,string vName);
void SetAID(int vID);
int& GetAID();
void SetName(string vName);
string& GetName();
bool operator==(const TableA& vTableA) const;
private:
int AID;
string Name;
};
而operator的實作為
bool TableA::operator ==(const TableA& vTableA) const{
return (this->AID == vTableA.AID) && (this->Name==vTableA.Name);
}
然後在主程式中
list<TableA> aaa;
aaa.push_back(TableA(1,"a"));
aaa.push_back(TableA(2,"b"));
aaa.push_back(TableA(3,"c"));
cout<<aaa.size()<<endl;
aaa.remove(TableA(2,"b"));
cout<<aaa.size()<<endl;
這樣的話,以size來檢查,是正常的(我主要只是想要list的remove可以成功動作而已)
但這個例子和上個例子來說,我看不出哪裡不一樣,但為什麼一個會成功一個不會呢?
請各位說明一下,謝謝
ps.後來我發現到,前者取ID是透過GetID(),然後會有錯
後者則是直接讀取ID的屬性,但是,我還是不懂為什麼第一個的方法不行..@@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.18.48.28
※ 編輯: tyc5116 來自: 163.18.48.28 (09/07 16:50)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章