c++基礎--operator+定義在類內仍是在類外

操做符重定義c++

若不用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報錯this

complex
	operator +(const complex,const complex&);

operator+是一個雙目運算符,它的入參應該是兩個。定義在類內的時候,每個函數會自動天界一個默認入參this。而很明顯 咱們計算複數的時候 y = x + z。這種狀況是不須要this的。因此在這種不須要this的狀況下,咱們須要將operator+ 定義爲全局函數。code

與之相比,+=也爲雙目運算符,爲何它就能定義在類內了呢?blog

由於 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
相關文章
相關標籤/搜索