運算符重載
運算符重載的本質是函數重載。
語法格式
返值類型 operator 運算符名稱(形參列表)
{
重載實體;
}
operator 運算符名稱 在一起構成了新的函數名。比如對于自定義類Complex
Complex operator+(const Complex &c1,const Complex &c2);
我們會說,operator+ 重載了運算符+。
兩種重載函數
友元函數重載
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(float x = 0, float y = 0) : _x(x), _y(y) {}
void dis()
{
cout << "(" << _x << "," << _y << ")" << endl;
}
friend const Complex operator+(const Complex &c1, const Complex &c2);
private:
float _x;
float _y;
};
const Complex operator+(const Complex &c1, const Complex &c2)
{
return Complex(c1._x + c2._x, c1._y + c2._y);
}
int main()
{
Complex c1(2, 3);
Complex c2(3, 4);
c1.dis();
c2.dis();
Complex c3 = operator+(c1, c2);
c3.dis();
return 0;
}
成員函數重載
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(float x = 0, float y = 0) : _x(x), _y(y) {}
void dis()
{
cout << "(" << _x << "," << _y << ")" << endl;
}
const Complex operator+(const Complex &another);
private:
float _x;
float _y;
};
const Complex Complex::operator+(const Complex &another)
{
return Complex(this->_x + another._x, this->_y + another._y);
}
int main()
{
Complex c1(2, 3);
Complex c2(3, 4);
c1.dis();
c2.dis();
Complex c3 = c1+c2;
c3.dis();
return 0;
}
運算符重載小結
不可重載的運算符
. (成員訪問運算符)
.* (成員指針訪問運算符)
:: (域運算符)
sizeof (長度運算符)
?: (條件運算符)
只能重載為成員函數的運算符
= 賦值運算符
[] 下標運算符
() 函數運算符
-> 間接成員訪問
->* 間接取值訪問
常規建議
運算符 | 建議使用 |
---|---|
所有的一元運算符 | 成員函數重載 |
+= -= /= *= ^= &= != %= >>= <<= | 成員函數重載 |
其它二員運算符 | 友元函數重載 |