作者csihcs (非天夜翔)
看板C_and_CPP
標題Re: [問題] operator overloading
時間Wed Oct 14 11:35:00 2009
: ※ 引述《adrianshum (Alien)》之銘言:
: : ※ 引述《wk7 (wk7)》之銘言:
: : 最近再複習以前沒學好的東西
: : operator overloading裡面有幾樣東西我搞混了...
: : 1. SparseMatrix& operator=(const SparseMatrix& ); -->return *this
: : 2. SparseMatrix operator=(const SparseMatrix& ); -->return *this
怎麼覺得兩個同時寫在 class 中,會 compile 不過。
想法參考自:
class A {
A method(const A&) {return *this;}
A& method(const A&) {return *this;}
};
這樣寫 compiler 會回應有錯吧。
: : 這兩者之間有甚麼差別阿??
: : 還有2為什麼是return this? 那不是一個指標嗎?
: 大概是你搞錯了, 應該不會 return this
: 你這兩個 overload 要 return 的都是 SparseMatrix,
: 除非你碰巧有一個 ctor 是 SparseMatrix(SparseMatrix*)
: 我記得好像 compiler 會自動幫你用這 ctor (不肯定)
: : 另外以1為例
: : SparseMatrix& operator=(const SparseMatrix& sm){
: : this.xxx=sm.xxx;
: : }
: : 看過的範例的參數都是用 type&,假如我用type*呢??像下面這樣
: : SparseMatrix& operator=(const SparseMatrix* sm ){
: : this.xxx=sm->xxx;
: : }
: : 能不能過阿..?
: : 謝謝
: 可以, 只是你用起來的時候會, = 右邊需要一個 SparseMatrix pointer
: 而已, 即是, 如果你沒有另外寫 operator=(SparseMatrix&) 的話:
: mySparseMatrix = anotherSparseMatrix; // 不行
: mySparseMatrix = &anotherSparseMatrix; // ok
: mySparseMatrix = aSparseMatrixPointer; // ok
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
1F:→ wk7:恩謝謝 妳回答的第一題是我剛剛搞錯了 在妳尚未回文之前有修正 10/14 11:02
2F:→ wk7:我想知道的是這兩種方式使用上意義上的差別在哪?? 10/14 11:03
SpareseMatrix mySparseMatrix,anotherSparseMatrix;
*SpareseMatrix aSparseMatrixPointer;
mySparseMatrix = anotherSparseMatrix;
equal to
mySparseMatrix = mySparseMatrix.operator=(anotherSparseMatrix);
use the prototype :
SparseMatrix& operator=(const SparseMatrix&);
mySparseMatrix = &anotherSparseMatrix;
equal to
mySparseMatrix = mySparseMatrix.operator=(&anotherSparseMatrix);
use the prototype :
SparseMatrix& operator=(const SparseMatrix*);
mySparseMatrix = aSparseMatrixPointer;
equal to
mySparseMatrix = mySparseMatrix.operator=(aSparseMatrixPointer); // 改一下
use the prototype :
SparseMatrix& operator=(const SparseMatrix*);
以上有錯請指正 m(_@_)m
所以 Alien 大說 "沒有另外寫 operator=(SparseMatrix&) 的話"
mySparseMatrix = anotherSparseMatrix; // 不行
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.9.2
3F:推 adrianshum:開首那個同時寫當然不行, 就這這部份能過, 用的時候也 10/14 12:09
4F:→ adrianshum:會有 ambiguity 10/14 12:09
5F:→ adrianshum:不過你回應不要用 repost 比較好, 我自己都分不出哪些 10/14 12:10
6F:→ adrianshum:是你寫的哪些是我寫的了... 10/14 12:10
7F:→ wk7:紅色那段 equal to 是不是也該用aSparseMatrixPointer呢? 10/14 12:14
※ 編輯: csihcs 來自: 211.74.9.2 (10/14 12:17)
8F:→ csihcs:改好了~~~謝謝兩位大大的提醒 m(_@_)m 10/14 12:17