運算子重定義
若不用this,運算子應該定義在類外
#pragma once
#ifndef _COMPLEX_
#define _COMPLEX_
class complex;
complex&
_doapl(complex* ths, const complex& r);
class complex
{
public:
complex(double r = 0, double i = 0)
: re(r), im(i) {};
double real() const { return re; };
double img() const { return im; };
//出現問題,vs提示此運算子函式的引數太多
complex
operator +(const complex,const complex&);
//與之相比,+=沒有出現問題
complex&
operator +=(const complex&);
private:
double re, im;
};
complex
complex::operator +(const complex&);
#endif
在上述代碼中,定義在類內的operator報錯
complex
operator +(const complex,const complex&);

operator+是一個雙目運算子,它的入參應該是兩個,定義在類內的時候,每一個函式會自動天界一個默認入參this,而很明顯 我們計算復數的時候 y = x + z,這種情況是不需要this的,所以在這種不需要this的情況下,我們需要將operator+ 定義為全域函式,
與之相比,+=也為雙目運算子,為什么它就能定義在類內了呢?
因為 y+=z,此時是需要y的值的,也就是說,在真正計算的時候,是需要this的值的,所以應該定義在類內,
編譯器會自動檢查,若雙目運算子定義在類內,則最多只能有一個入參,因為this也算一個,
我們應該這樣定義:
#pragma once
#ifndef _COMPLEX_
#define _COMPLEX_
class complex;
complex&
_doapl(complex* ths, const complex& r);
class complex
{
public:
complex(double r = 0, double i = 0)
: re(r), im(i) {};
double real() const { return re; };
double img() const { return im; };
//與之相比,+=沒有出現問題
complex&
operator +=(const complex&);
private:
double re, im;
};
//定義為全域函式
complex
operator +(const complex&){
};
#endif
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232842.html
標籤:C++
