"運(yùn)算符"幾乎是所有的編程語(yǔ)言中都會(huì)出現(xiàn)的概念,例如+、-、*、/ 就是最常見(jiàn)的運(yùn)算符。C++預(yù)定義的運(yùn)算符只能作用于C++已經(jīng)定義的基本數(shù)據(jù)類型,對(duì)于用戶自定義的類型,如果也需要進(jìn)行類似的運(yùn)算操作的話,就需要重新去定義這些運(yùn)算,賦予運(yùn)算符新的功能,即"運(yùn)算符重載"。
一、運(yùn)算符重載時(shí)需要注意的點(diǎn)
- 運(yùn)算符重載不改變運(yùn)算符的"優(yōu)先級(jí)"與"結(jié)合性",也不改變運(yùn)算符的操作數(shù)個(gè)數(shù)。
- 重載運(yùn)算符時(shí)不應(yīng)該改變運(yùn)算符的含義,比如說(shuō)"+"重載之后仍然表示加法的含義。
- 運(yùn)算符重載的本質(zhì)是函數(shù)重載,運(yùn)算符函數(shù)可以作為成員函數(shù),也可以作為非成員函數(shù),作為非成員函數(shù)時(shí)一般為友元函數(shù)。
- 在大多數(shù)情況下,將運(yùn)算符函數(shù)重載為類的成員函數(shù)和類的友元函數(shù)都是可以的。但是要注意下面幾個(gè)運(yùn)算符函數(shù)必須要重載為成員函數(shù):=、[]、()、->。
- C++中大部分運(yùn)算符都是可以被重載的,但是有5個(gè)運(yùn)算符不允許被重載:"."、".*"、"::"、"?:"、"sizeof"。
二、運(yùn)算符重載的語(yǔ)法:
<返回值類型> operator<運(yùn)算符>(<形參列表>)
{
//函數(shù)體
}
三、運(yùn)算符重載實(shí)例(復(fù)數(shù)類)
#include <IOStream>
using namespace std;
class Complex
{
public:
Complex(int real, int imag);
~Complex();
// 成員函數(shù)重載運(yùn)算符
Complex& operator+(const Complex& c);
// 友元函數(shù)重載"流操作運(yùn)算運(yùn)算符"
friend ostream& operator<<(ostream& out, const Complex& c);
private:
int real_;
int imag_;
};
Complex::Complex(int real, int imag)
{
real_ = real;
imag_ = imag;
}
Complex::~Complex()
{
}
Complex& Complex::operator+(const Complex& c)
{
this->real_ += c.real_;
this->imag_ += c.imag_;
return *this;
}
ostream& operator<<(ostream& out, const Complex& c)
{
out << c.real_;
if(c.imag_ > 0)
out << "+" << c.imag_ << "i";
else
out << c.imag_ << "i";
return out;
}
int main()
{
Complex a(4, -6);
cout << a << endl; // 等于operator<<(cout, a);
Complex b(4, 3);
cout << b << endl;
Complex c = a + b;
cout << c << endl;
return 0;
}
