運算符重載

運算符重載

運算符重載的本質是函數重載。

語法格式

返值類型 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 (長度運算符)
?:  (條件運算符)

只能重載為成員函數的運算符

= 賦值運算符 
[] 下標運算符 
() 函數運算符 
-> 間接成員訪問
->* 間接取值訪問

常規建議

運算符 建議使用
所有的一元運算符 成員函數重載
+= -= /= *= ^= &= != %= >>= <<= 成員函數重載
其它二員運算符 友元函數重載
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。