[問題] ++重載的觀念
問題(Question):
class ADD{
friend ADD operator++(ADD op);
friend ADD operator++(ADD &op,int n);
public: ADD(int i=0,int j=0) {a=i;b=j;}
void show() const{cout << "a=" << a << ",b=" << b << endl;}
private:
int a,b; };
ADD operator++(ADD op)
{ ++op.a;
++op.b;
cout << "++1 \r\n";
return op;}
ADD operator++(ADD &op,int n){
++op.a;
++op.b;
cout << "++2 \r\n";
return op;}
int main(int argc, char **argv)
{
ADD obj(1,2);
obj.show();
(obj++).show();
obj.show();
(++obj).show();
obj.show();
}
餵入的資料(Input):
預期的正確結果(Expected Output):
a=1,b=2
a=2,b=3
a=2,b=3
a=3,b=4
a=2,b=3
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
關鍵在於 (obj++).show(); 會呼叫ADD operator++(ADD &op,int n)
(++obj).show() 呼叫 ADD operator++(ADD op)
為什麼哩?
網路上查的資料
class Object {
//...
public:
Object operator++();
Object operator++(int);
} obj;
//...
++obj; //is equivalent to
obj.operator++();
obj++; //is equivalent to
obj.operator++(0);
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.95.223
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1471505931.A.0EC.html
※ 編輯: orafrank (61.216.95.223), 08/18/2016 15:40:47
→
08/18 15:40, , 1F
08/18 15:40, 1F
※ 編輯: orafrank (61.216.95.223), 08/18/2016 15:43:20
※ 編輯: orafrank (61.216.95.223), 08/18/2016 15:44:52
推
08/18 15:55, , 2F
08/18 15:55, 2F
→
08/18 15:58, , 3F
08/18 15:58, 3F
→
08/18 15:59, , 4F
08/18 15:59, 4F
→
08/18 16:13, , 5F
08/18 16:13, 5F
推
08/18 16:23, , 6F
08/18 16:23, 6F
※ 編輯: orafrank (61.216.95.223), 08/18/2016 16:43:27
推
08/18 16:54, , 7F
08/18 16:54, 7F
→
08/18 16:56, , 8F
08/18 16:56, 8F
→
08/18 16:57, , 9F
08/18 16:57, 9F
→
08/18 16:57, , 10F
08/18 16:57, 10F
推
08/21 10:09, , 11F
08/21 10:09, 11F