-1
假設我們要實現一個複數類:使用對象指針指向重載賦值操作符可以嗎?
#include <iostream>
using namespace std;
class Complex{
public:
double real;
double imag;
Complex();
Complex(double _r, double _i)
:real(_r),imag(_i){}
const Complex* operator = (const Complex*);
};
通常重載賦值操作符,我們將傳遞一個const引用作爲參數,但我們爲什麼不能傳遞一個指針代替,這樣的嗎?
const Complex* Complex::operator = (const Complex* cp){
real = cp->real;
imag = cp->imag;
return this;
}
int main(){
Complex c1(1,2), c2(3,4), c3(5,6);
Complex *pc = &c3;
c1 = c2 = pc;
cout<<"c1 = "<<c1.real<<"+"<<c1.imag<<'i'<<endl;
cout<<"c2 = "<<c2.real<<"+"<<c2.imag<<'i'<<endl;
cout<<"c3 = "<<c2.real<<"+"<<c2.imag<<'i'<<endl;
return 0;
}
上面的代碼運行,並給予正如我預期的答案:所有三個複數產生5+6i
。
我知道這種方法是非常不正規的,但它似乎也適用。我想知道爲什麼我們的老師強烈建議我們使用參考作業?非常感謝你們!
您的'複雜'類不需要任何賦值運算符,編譯器生成的它會做它應該做的。 – milleniumbug
'* this'不是'Complex *'。 – juanchopanza
「爲什麼我們不能」 - 我有一個更重要的問題。爲什麼**會**你?你的老師建議引用是因爲它們被添加到C++出於各種各樣的理由,包括實現複製/賦值構造函數,操作符重載等。你認爲你知道更好嗎?我對指針沒有任何反應,並經常使用它們,但是我不喜歡它們在不適當的情況下使用,比如這裏。 –