美文网首页
运算符重载

运算符重载

作者: 普朗tong | 来源:发表于2020-05-09 17:28 被阅读0次

    运算符重载

    运算符重载的本质是函数重载。

    语法格式

    返值类型 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 (长度运算符)
    ?:  (条件运算符)
    

    只能重载为成员函数的运算符

    = 赋值运算符 
    [] 下标运算符 
    () 函数运算符 
    -> 间接成员访问
    ->* 间接取值访问
    

    常规建议

    运算符 建议使用
    所有的一元运算符 成员函数重载
    += -= /= *= ^= &= != %= >>= <<= 成员函数重载
    其它二员运算符 友元函数重载

    相关文章

      网友评论

          本文标题:运算符重载

          本文链接:https://www.haomeiwen.com/subject/ggxlnhtx.html